【问题标题】:java split method to arraysjava拆分数组的方法
【发布时间】:2018-04-30 04:35:57
【问题描述】:

我有如下数据:

3.3 John
3.9 Jim
3.5 Kathy
3.2 Steve
2.4 Stacy
2.8 Faith

代码:

File StudentGrade = new File("data.txt");
    Scanner reader = new Scanner(StudentGrade);
    int size = reader.nextInt();
    //debug: System.out.println(size);

    String[] gradeArr = new String[size];// array created for grades
    //debug: System.out.println(gradeArr);
    String[] nameArr = new String[size];//array created for name
    String[] temp = new String[100];// array created for temporary array
    int index = 0;//index indicator

    while (reader.hasNextLine()) {
        String s = reader.nextLine();
        //System.out.println(s);
        temp = s.split("\\s+");
        gradeArr[index] = temp[0];
        nameArr[index] = temp[1];
        System.out.println("grades= "+ gradeArr[index]+ " name = "+ nameArr);
        index++;
    }

它必须被拆分为 2 个数组,一个用于数字,另一个用于名称。 我可以得到temp[] 的数字,但我不知道如何将名称转换为另一个数组。请教我。

【问题讨论】:

  • 请告诉我们如何将数字放入数组中。
  • 你输入的二维数组是一维数组吗?
  • 它来自 data.txt。使用 File 从文本文件中扫描它。
  • 一维数组

标签: java arrays split


【解决方案1】:

这看起来是一个应用正则表达式、将 digit.digit 空格和后续单词字符分组的好地方。迭代匹配。构建两个List(s)。喜欢,

Pattern p = Pattern.compile("(\\d+\\.\\d+)\\s+(\\w+)");
List<Double> grades = new ArrayList<>();
List<String> names = new ArrayList<>();
String s = "3.3 John 3.9 Jim 3.5 Kathy 3.2 Steve 2.4 Stacy 2.8 Faith";
Matcher m = p.matcher(s);
while (m.find()) {
    grades.add(Double.valueOf(m.group(1)));
    names.add(m.group(2));
}
System.out.printf("%s %s%n", grades, names);

输出

[3.3, 3.9, 3.5, 3.2, 2.4, 2.8] [John, Jim, Kathy, Steve, Stacy, Faith]

【讨论】:

  • 只是补充一下,数组可能不是你想要的,你可能想实际制作一个代表姓名记录的类来评分,或者存储在地图中
  • @RyanTheLeach 或者一个元组,但是一个有两个字段的 POJO 很有意义(只是回答 OP 提出的问题)。
  • 感谢您的帮助。你的两个建议都有帮助。
  • 可以用split的方法吗?
  • 是的,你只需要用自己溢出的结果来构造它。
【解决方案2】:

当您调用split("\\s+") 时,结果数组将如下所示:

gradeArr[0] = 3.3;
gradeArr[1] = John;

所以如果你打电话给gradeArr[1],你会得到这个名字。

您需要在reader.nextInt(); 之后调用reader.nextLine();。您需要读取int 之后的输入字符,这样您就可以在 .text 文件的下一行。

以下代码有效:

File StudentGrade = new File("E:/workspace/Test/src/main/java/data.txt");
        Scanner reader = new Scanner(StudentGrade);
        int size = reader.nextInt();
        // debug: System.out.println(size);
        reader.nextLine();
    String[] gradeArr = new String[size];// array created for grades
    // debug: System.out.println(gradeArr);
    String[] nameArr = new String[size];// array created for name
    String[] temp = new String[100];// array created for temporary array
    int index = 0;// index indicator

    while (reader.hasNextLine()) {
        String s = reader.nextLine();
        // System.out.println(s);
        temp = s.split("\\s+");
        gradeArr[index] = temp[0];
        nameArr[index] = temp[1];
        System.out.println("grades= " + gradeArr[index] + " name = " + nameArr[index]);
        index++;
    }

结果如下:

grades= 3.3 name = John
grades= 3.9 name = Jim
grades= 3.5 name = Kathy
grades= 3.2 name = Steve
grades= 2.4 name = Stacy
grades= 2.8 name = Faith

数据.文本:

6
3.3 John
3.9 Jim
3.5 Kathy
3.2 Steve
2.4 Stacy
2.8 Faith

【讨论】:

  • 谢谢。我确实通过打印出gradeArr [1]来检查它,但它显示为“null”。
  • 试试split(" +")
  • 对不起,它实际上显示如下: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at testing2.main(testing2.java:24)
  • 请使用此新信息编辑您的问题,以便新人可以参与,这对我来说也会更容易。
  • 我也怀疑这个IndexOutOfBoundException是因为size是0,所以你的nameArr大小是0。
【解决方案3】:
import java.io.*;
import java.util.*;

class HelloTest {
 public static void main(String args[]) {
  try {
   //data.txt contains 6 line data as in your question 
   File file = new File("data.txt");
   Scanner reader = new Scanner(file);
   int size = 6; // six line data so it is 6 
   String[] nameArr = new String[size]; //array created for name
   String[] gradeArr = new String[size]; // array created for temporary array
   int i = 0;
   while (size--> 0) {
    String s = reader.nextLine();
    String[] data = s.split(" ");
    nameArr[i] = data[1];
    gradeArr[i] = data[0];
    i++;
   }

   for (String name: nameArr) System.out.println("name is " + name);
   for (String grade: gradeArr) System.out.println("grade is " + grade);



  } catch (FileNotFoundException fe) {
   fe.printStackTrace();
  }
 }
}

【讨论】:

  • 嗨,毗湿奴,谢谢你的建议。我试过你的建议。但是,结果显示异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多