Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取文本文件并将其拆分为数组-Android_Java_Android_Arrays_Text_Split - Fatal编程技术网

Java 读取文本文件并将其拆分为数组-Android

Java 读取文本文件并将其拆分为数组-Android,java,android,arrays,text,split,Java,Android,Arrays,Text,Split,我已经问了很多这样的问题,但似乎还是弄不明白。我把一个文本文件分成了几行。每行由5条数据组成,数据之间用“,”分隔。我正在尝试读取此文件,并将信息拆分为以下形式的字符串数组: String [][] xyz = new String [5][100]; 有人能帮我一个简单的解决办法吗!?谢谢!!!:) 数据示例: John,22,1953,Japan,Green Anna,18,2012,Mexico,Blue Sam,34,1976,San Francisco,Pink 示例代码: 公共

我已经问了很多这样的问题,但似乎还是弄不明白。我把一个文本文件分成了几行。每行由5条数据组成,数据之间用“,”分隔。我正在尝试读取此文件,并将信息拆分为以下形式的字符串数组:

String [][] xyz = new String [5][100]; 
有人能帮我一个简单的解决办法吗!?谢谢!!!:)

数据示例:

John,22,1953,Japan,Green
Anna,18,2012,Mexico,Blue
Sam,34,1976,San Francisco,Pink
示例代码:

公共void readFile(){

错误

07-24 06:26:56.524:E/AndroidRuntime(27203):致命异常:主 07-24 06:26:56.524:E/AndroidRuntime(27203):java.lang.ArrayIndexOutofBounds异常:长度=10;索引=10 07-24 06:26:56.524:E/AndroidRuntime(27203):位于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.ActivityThread.main(ActivityThread.java:4867)上 07-24 06:26:56.524:E/AndroidRuntime(27203):位于java.lang.reflect.Method.Invokenactive(本机方法) 07-24 06:26:56.524:E/AndroidRuntime(27203):位于java.lang.reflect.Method.invoke(Method.java:511) 07-24 06:26:56.524:E/AndroidRuntime(27203):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007) 07-24 06:26:56.524:E/AndroidRuntime(27203):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
07-24 06:26:56.524:E/AndroidRuntime(27203):在dalvik.system.NativeStart.main(本机方法)

我假设您了解读取文件的基本知识。因此,让我们从字符串等于一整行的位置开始:

String s = "John,22,1953,Japan,Green";
您可以调用split()函数来返回由某个表达式(在本例中为逗号)细分的数组,如下所示:

然后是第[0]=“John”,第[1]=22行,依此类推。您可以使用这些数组执行任何操作,包括将它们存储在多维数组中(如果您希望执行此操作)

String[][] xyz = new String[numRows][5];
xyz[0] = row;
System.out.println(xyz[0][0]); //prints "John"

希望这一点很清楚,我也理解了您试图正确执行的操作。

我假设您理解了读取文件的基本知识。因此,让我们从字符串s等于一整行的位置开始:

String s = "John,22,1953,Japan,Green";
您可以调用split()函数来返回由某个表达式(在本例中为逗号)细分的数组,如下所示:

然后是第[0]=“John”,第[1]=22行,依此类推。您可以使用这些数组执行任何操作,包括将它们存储在多维数组中(如果您希望执行此操作)

String[][] xyz = new String[numRows][5];
xyz[0] = row;
System.out.println(xyz[0][0]); //prints "John"

希望这是清楚的,我理解了您试图正确执行的操作。

您可以使用BufferedReader读取每一行,然后使用
.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++;
}   
BufferedReader bfr=新的BufferedReader(InputStreamReader/FileReader…);
字符串行=null;
int指数=0;
字符串[][]xyz=新字符串[100][5];
而((line=bfr.readLine())!=null){
如果(索引

希望这有帮助!

您可以使用BufferedReader读取每一行,然后使用
.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++;
}   
BufferedReader bfr=新的BufferedReader(InputStreamReader/FileReader…);
字符串行=null;
int指数=0;
字符串[][]xyz=新字符串[100][5];
而((line=bfr.readLine())!=null){
如果(索引
希望这有帮助!

请参阅使用缓冲读取器逐行读取文件的示例,然后将其与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();
}
AssetManager经理;
字符串行=null;
List xyzList=new ArrayList();
字符串[][]xyz;
输入流为;
输入流读卡器isr;
缓冲剂;
试一试{
manger=getAssets();
is=manager.open(“data.txt”);
isr=新的InputStreamReader(is);
br=新的缓冲读取器(isr);
而((line=br.readLine())!=null){
xyzList.add(line.split(“,”);
}
xyz=(字符串[][])xyzList.toArray();
}捕获(IOE1异常){
Toast.makeText(getBaseContext(),“Problem!”,Toast.LENGTH\u SHORT.show();
}最后{
br.close();
isr.close();
is.close();
}
请参阅使用缓冲读取器逐行读取文件的示例,然后将其与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();
}
AssetManager经理;
字符串行=null;
List xyzList=new ArrayList();
字符串[][]xyz;
输入流为;
输入流读卡器isr;
缓冲剂;
试一试{
manger=getAssets();
is=manager.open(“data.txt”);
isr=新的InputStreamReader(is);
br=新的缓冲读取器(isr);
而((line=br.readLine())!=null){
xyzList.add(line.split(“,”);
}
xyz=(字符串[][])xyzList.toArray();
}捕获(IOE1异常){
Toast.makeText(getBaseContext(),“Problem!”,Toast.LENGTH\u SHORT.show();
}最后{
br.close();
isr.close();
is.close();
}
/*假设您希望从该数据中得到一个5×n的矩阵
约翰,221953,日本,格林
安娜,182012,墨西哥,蓝色
山姆,341976岁,旧金山,Pink
.
.
.
.
第n行
字符串[]行=s.split(“,”)*/
用于(int i)=