Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_File - Fatal编程技术网

Java 无法将文件中的子字符串分配给我的数组

Java 无法将文件中的子字符串分配给我的数组,java,arrays,file,Java,Arrays,File,我有一份50个州和首都的文件,格式如下: 阿拉巴马州,塔拉哈西 威斯康星,麦迪逊 我试图将状态和大写字母分配给不同的数组,但for循环有问题。我的代码如下: import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Scanner; public class StatesAndCapitals { public static void main(String[] args) t

我有一份50个州和首都的文件,格式如下:

阿拉巴马州,塔拉哈西

威斯康星,麦迪逊

我试图将状态和大写字母分配给不同的数组,但for循环有问题。我的代码如下:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class StatesAndCapitals {

public static void main(String[] args) throws FileNotFoundException {
    FileInputStream is = new FileInputStream("capitals.txt");
    Scanner input = new Scanner(is);
    String[] states = new String[50];
    String[] capitals = new String[50];
    for (int i = 0; i < states.length; i++){
        int a = states[i].lastIndexOf(",");
        String states1 = states[i].substring(0, a);
        states[i] = states1;
        input.nextLine();
    }//end for loop

    System.out.println(states);

}

任何帮助都将不胜感激。

对象的默认值为
null

String[] states = new String[50]; //<-- you declare an array that can holds 50 Strings but they're actually null if you don't initialize them.
然后处理这个
字符串
,并将其添加到相应的数组中

并不是说如果文件中没有足够的行(少于50行),它将抛出
java.util.NoSuchElementException
,因为找不到更多的行

您可以将此条件添加到循环:
for(int i=0;i

当您能够正确地执行此操作时,我建议您处理。

for(int I=0;I
整个循环是反向的。当您第一次在
i=0
输入时,您尝试获取从未见过任何赋值的
状态数组的子字符串。然后在循环中处理该子字符串,然后以实际从未使用过的
input.nextLine();
结束

如果正确使用
输入
变量,它实际上将保存打开文件中的数据,并允许您使用
子字符串
操作字符串。您需要重新排序并修复循环。

states[i].lastIndexOf(",");
您正在分析
状态[i]
的内容。但这是您的目标数组,而不是包含文本的源。源是从
输入返回的内容。nextLine()
,这应该是您在每次迭代中首先要做的事情:

for (int i = 0; i < states.length; i++){
    String currentLine = input.nextLine();
    // now extract the data from current line, and store them in the arrays.
}
for(int i=0;i
for (int i = 0; i < states.length; i++){
    int a = states[i].lastIndexOf(",");
    String states1 = states[i].substring(0, a);
    states[i] = states1;
    input.nextLine();
}//end for loop
states[i].lastIndexOf(",");
for (int i = 0; i < states.length; i++){
    String currentLine = input.nextLine();
    // now extract the data from current line, and store them in the arrays.
}