Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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 用空格将字符串中的元素分隔为二维数组_Java_Arrays_Arraylist_Bufferedreader - Fatal编程技术网

Java 用空格将字符串中的元素分隔为二维数组

Java 用空格将字符串中的元素分隔为二维数组,java,arrays,arraylist,bufferedreader,Java,Arrays,Arraylist,Bufferedreader,我试图将以下字符串存储在文件中的二维数组中。我所写的代码除了当一个元素包含一个空格时,它会分离成一个额外的元素。这是我的档案: Student1 New York Student 2 Miami Student3 Chicago 因此,我希望我的输出如下所示: [Student1] [New York] [Student 2] [Miami] [Student3] [Chicago] 这是我的实际输出: [Student1] [New] [York] [Student]

我试图将以下字符串存储在文件中的二维数组中。我所写的代码除了当一个元素包含一个空格时,它会分离成一个额外的元素。这是我的档案:

Student1    New York   
Student 2   Miami
Student3    Chicago
因此,我希望我的输出如下所示:

[Student1] [New York]
[Student 2] [Miami]
[Student3] [Chicago]
这是我的实际输出:

[Student1] [New] [York]
[Student] [2] [Miami]
[Student3] [Chicago]
以下是我到目前为止所写的内容:

        String file= "file.txt";
        BufferedReader br = new BufferedReader(new FileReader(file));
        while ((file = br.readLine()) != null) {
            if (!file.isEmpty()) {
                String strSingleSpace = file.trim().replaceAll("\\s+", " "); 
                String[] obj = strSingleSpace.trim().split("\\s+");
                int i=0;
                String[][] newString = new String[obj.length][]; 

                for(String temp : obj){
                    newString[i++]=temp.trim().split("\\s+");
                }

                List<String[]> yourList = Arrays.asList(newString);
                System.out.println(yourList.get(0)[0] + " " + yourList.get(1)[0]);
String file=“file.txt”;
BufferedReader br=新的BufferedReader(新文件读取器(文件));
而((file=br.readLine())!=null){
如果(!file.isEmpty()){
字符串strSingleSpace=file.trim().replaceAll(“\\s+”,”);
String[]obj=strSingleSpace.trim().split(\\s+);
int i=0;
字符串[][]新闻字符串=新字符串[obj.length]];
用于(字符串温度:obj){
新闻字符串[i++]=temp.trim().split(\\s+);
}
List yourList=Arrays.asList(新闻字符串);
System.out.println(yourList.get(0)[0]+“”+yourList.get(1)[0]);
只是给你一些“思考的食物”:你的代码对待所有行的方式都是一样的。就好像它们看起来完全一样。虽然你已经说得很清楚,但有些行的格式不同

换句话说:盲目地分割空格是没有意义的,如果有时候空格属于第一列或第二列

相反:

  • 确定一行中某个数字的最后一个索引,然后该索引之前的所有内容“组成第一列”
  • 该行的其余部分(在最后一个数字之后)应进入第二列;仅对剩余字符串调用trim(),以消除潜在的前导空格

  • 您也可以将所有这些都放在一个匹配的正则表达式中;但这可能是一个家庭作业;我将这个练习留给读者。

    我认为对于您的特定测试用例,如果您更改这一行,它将起作用:

    String[] obj = strSingleSpace.trim().split("\\s+");\
    
    为此:

    String[] obj = strSingleSpace.trim().split("\\s+", 1);