![](/img/trans.png)
[英]Read in a text file 1 line at a time and split the words into an Array Java
[英]Read and split text file into an array - Android
我已經解決了這些問題,但似乎仍然無法解決。 我有一個文本文件,分為幾行。 每行包含5個數據,中間用“,”分隔。 我正在嘗試讀取此文件並將信息拆分為以下形式的字符串數組:
String [][] xyz = new String [5][100];
請有人幫我一個簡單的解決方案! 謝謝!!! :)
數據示例:
John,22,1953,Japan,Green
Anna,18,2012,Mexico,Blue
Sam,34,1976,San Francisco,Pink
樣例代碼:
公共無效的readFile(){
AssetManager manger;
String line = null;
try {
manger = getAssets();
InputStream is = manger.open("data.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
values.add(line.split(","));
//System.out.print(value);
}
br.close();
String[] array = values.toArray(new String[20];
} catch (IOException e1) {
Toast.makeText(getBaseContext(), "Problem!", Toast.LENGTH_SHORT).show();
}
}
錯誤
07-24 06:26:56.524:E / AndroidRuntime(27203):致命例外:主要07-24 06:26:56.524:E / AndroidRuntime(27203):java.lang.ArrayIndexOutOfBoundsException:length = 10; index = 10 07-24 06:26:56.524:E / AndroidRuntime(27203):at com.testingReadArray.weebly.testingReadArray.MainActivity.readFile(MainActivity.java:182)07-24 06:26:56.524:E / AndroidRuntime (27203):位於com.testingReadArray.weebly.testingReadArray.MainActivity $ planOnClickListener.onItemSelected(MainActivity.java:148)07-24 06:26:56.524:E / AndroidRuntime(27203):位於android.widget.AdapterView.fireOnSelected( AdapterView.java:895)07-24 06:26:56.524:E / AndroidRuntime(27203):在android.widget.AdapterView.access $ 200(AdapterView.java:50)07-24 06:26:56.524:E / AndroidRuntime (27203):位於android.widget.AdapterView $ SelectionNotifier.run(AdapterView.java:863)07-24 06:26:56.524:E / AndroidRuntime(27203):位於android.os.Handler.handleCallback(Handler.java: 615)07-24 06:26:56.524:E / AndroidRuntime(27203):位於android.os.Handler.dispatchMessage(Handler.java:92)07-24 06:26:56.524:E / AndroidRuntime(27203):位於android.os.Looper.loop(Looper.java:137)07-24 06:26:56.524:E / AndroidRuntime(27203):在android.app.Act ivityThread.main(ActivityThread.java:4867)07-24 06:26:56.524:E / AndroidRuntime(27203):at java.lang.reflect.Method.invokeNative(Native Method)07-24 06:26:56.524:E / AndroidRuntime(27203):at java.lang.reflect.Method.invoke(Method.java:511)07-24 06:26:56.524:E / AndroidRuntime(27203):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1007)07-24 06:26:56.524:E / AndroidRuntime(27203):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)07-24 06: 26:56.524:E / AndroidRuntime(27203):在dalvik.system.NativeStart.main(本機方法)
您可以使用BufferedReader讀取每一行,然后使用.split(',');
分割行.split(',');
方法。
一些偽代碼:
BufferedReader bfr = new BufferedReader(InputStreamReader/FileReader...);
String line = null;
int index = 0;
String [][] xyz = new String [100][5];
while ( (line = bfr.readLine()) != null) {
if (index < xyz.length) xyz[index] = line.split(",");
index++;
}
希望這對您有所幫助!
我假設您了解通讀文件的基礎知識。 因此,讓我們從String等於一整行開始:
String s = "John,22,1953,Japan,Green";
您可以調用split()函數從s返回數組,該數組由某些表達式(在這種情況下為逗號)細分,如下所示:
String[] row = s.split(","); //Returns a new String array {John,22,1953,Japan,Green}
然后,您將獲得row [0] =“ John”,row [1] = 22,依此類推。 您可以使用這些數組做任何您想做的事情,包括將數組存儲在多維數組中。
String[][] xyz = new String[numRows][5];
xyz[0] = row;
System.out.println(xyz[0][0]); //prints "John"
希望這很清楚,我了解您要正確執行的操作。
請參閱正確地在while循環中使用BufferedReader.readLine(),以獲取使用緩沖讀取器逐行讀取文件的示例,然后將其與Kon的答案結合起來,我認為您已經找到了解決方案。
AssetManager manger;
String line = null;
List<String[]> xyzList = new ArrayList<String[]>();
String[][] xyz;
InputStream is;
InputStreamReader isr;
BufferedReader br;
try {
manger = getAssets();
is = manager.open("data.txt");
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
xyzList.add(line.split(","));
}
xyz = (String[][])xyzList.toArray();
}catch (IOException e1) {
Toast.makeText(getBaseContext(), "Problem!", Toast.LENGTH_SHORT).show();
}finally{
br.close();
isr.close();
is.close();
}
/* Assuming you want a 5 by n matrix from this data
John,22,1953,Japan,Green
Anna,18,2012,Mexico,Blue
Sam,34,1976,San Francisco,Pink
.
.
.
.
nth row
String[] row = s.split(","); */
for (int i = 0; i<n i++)
{
for(int j = 0; j<originalString.length; j++)
{
xyz[i] = originalString[j].split(",");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.