Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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_String_Substring - Fatal编程技术网

Java 有没有一种方法可以用空格分隔文件扫描程序,但将名字和姓氏用空格分隔为一个字符串?

Java 有没有一种方法可以用空格分隔文件扫描程序,但将名字和姓氏用空格分隔为一个字符串?,java,string,substring,Java,String,Substring,我试图让扫描仪读取文件的行,并用空格分隔值,但同时将名字和姓氏作为一个字符串保存在一起 下面是一个例子: 将其视为纯文本文件: Rachael Adams 3.36 1.93 Foluke Akinradewo 4.81 1.14 Kayla Banwarth 2.98 0.5 Michelle Bartsch 0.28 1.42 Krista Vansant 2.78 0.86 Courtney Thompson 0.59 0.93 Kelly Murphy 1.15 0.58 Lauren

我试图让扫描仪读取文件的行,并用空格分隔值,但同时将名字和姓氏作为一个字符串保存在一起

下面是一个例子:

将其视为纯文本文件:

Rachael Adams 3.36 1.93
Foluke Akinradewo 4.81 1.14
Kayla Banwarth 2.98 0.5
Michelle Bartsch 0.28 1.42
Krista Vansant 2.78 0.86
Courtney Thompson 0.59 0.93
Kelly Murphy 1.15 0.58
Lauren Gibbemeyer 2.25 0.5
Alexis Crimes 3.89 1.34
Tori Dixon 0.92 1.62
Nicole Fawcett 4.01 0.61
Alisha Glass 1.96 1.55
Natalie Hagglund 2.49 0.52
Kim Hill 1.53 1.76
Cursty Jackson 0.69 1.44
我需要能够分别对每个字段进行排序,如下所示:

String s = "Kim Hill";
double d1 = 1.53;
double d2 = 1.76;
这样我就可以为每个Person对象将它们传递到构造函数中。
以下是我尝试过的:

    Roster(String fileName) throws FileNotFoundException {
    File rosterFile = new File(fileName);
    Scanner fileScanner = new Scanner(rosterFile);

    while (fileScanner.hasNextLine()) {
        String lineString = fileScanner.nextLine();
        String name = lineString.substring(0, lineString.length() - 10);
        Double attack = Double.valueOf(lineString.substring(lineString.length() - 9, lineString.length() - 5));
        Double defense = Double.valueOf(lineString.substring(lineString.length() - 5));
        peopleArrayList.add(new Person(name, attack, defense));
    }
    sizeOfRoster = peopleArrayList.size();
    fileScanner.close();
}
我遇到的问题是,一些行在求值数据中包含0.5而不是0.50,因此我的
lineString.length
在这里不适用。我的训练数据有额外的数字,所以现在我必须想出一种不同的方法。

试试这个:

public static void main (String[] args) {
        String name = null;
        double attack = 0, defense = 0;
        try {
            Scanner s = new Scanner(new File("file.txt"));
            while(s.hasNext()) {
                name = s.next() + " "+ s.next();
                attack = s.nextDouble();
                defense = s.nextDouble(); 

                peopleArrayList.add(new Person(name, attack, defense));

                System.out.println();
                System.out.println(name);
                System.out.println(attack);
                System.out.println(defense);
            }
            s.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
输出:

Rachael Adams
3.36
1.93

Foluke Akinradewo
4.81
1.14

Kayla Banwarth
2.98
0.5

Michelle Bartsch
0.28
1.42

Krista Vansant
2.78
0.86

Courtney Thompson
0.59
0.93

Kelly Murphy
1.15
0.58

Lauren Gibbemeyer
2.25
0.5

Alexis Crimes
3.89
1.34

Tori Dixon
0.92
1.62

Nicole Fawcett
4.01
0.61

Alisha Glass
1.96
1.55

Natalie Hagglund
2.49
0.52

Kim Hill
1.53
1.76

Cursty Jackson
0.69
1.44

将循环替换为以下内容:

while (fileScanner.hasNextLine()) {
    String lineString = fileScanner.nextLine();
    String[] inputs = lineString.split(" ");
    String name = inputs[0] + " " + inputs[1];
    Double attack = Double.valueOf(inputs[2]);
    Double defense = Double.valueOf(inputs[3]);
    peopleArrayList.add(new Person(name, attack, defense));
}

正则表达式可以很容易地解决这个问题。是否所有名称都保证具有相同的格式?没有中间名或多个名字?