Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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 如何解析文本文件/需要在switch语句中使用第一个字符_Java_Parsing_If Statement_Switch Statement - Fatal编程技术网

Java 如何解析文本文件/需要在switch语句中使用第一个字符

Java 如何解析文本文件/需要在switch语句中使用第一个字符,java,parsing,if-statement,switch-statement,Java,Parsing,If Statement,Switch Statement,我需要使用分隔符“:”解析文本文件 文本文件如下所示: a:29173:He:James:474937:2:4:1 t:27184:She:Susan:474930:6:4:2 c:28174:He:Meg:474931:5:4:1 她:罗宾:474947:4:4:4 我的第一个问题是如何解析switch语句中使用的第一个字符? 我在想下面的代码(我把它放在一起…但我很确定这是不正确的) 我知道我可以读取第一个字符&我知道我可以使用带有字符的switch语句,但是我一直在研究如何将这两个字符组合

我需要使用分隔符“:”解析文本文件

文本文件如下所示:

a:29173:He:James:474937:2:4:1

t:27184:She:Susan:474930:6:4:2

c:28174:He:Meg:474931:5:4:1

她:罗宾:474947:4:4:4

我的第一个问题是如何解析switch语句中使用的第一个字符? 我在想下面的代码(我把它放在一起…但我很确定这是不正确的)

我知道我可以读取第一个字符&我知道我可以使用带有字符的switch语句,但是我一直在研究如何将这两个字符组合在一起

File file = new File("test.txt");

    // Read the file
    try {
        Scanner scanner = new Scanner(file).useDelimiter(":");
        String line = scanner.nextLine();

        while (scanner.hasNextLine())
        {
            line = line.trim();
            int index; 
            String type;
            String name; 

            String identifier = scanner.next();
            switch(line.charAt(0)) {

            case 'p': 
                index = scanner.nextInt();
                name = scanner.next();      
                break;

            case 'c':
                index = scanner.nextInt();
                type = scanner.next();
                name = scanner.next();
                int partyC = scanner.nextInt();
                int empathyC = scanner.nextInt();
                int carryingCapacityC = scanner.nextInt();
                break;

            case 't':
                index = scanner.nextInt();
                type = scanner.next();
                int creatureT = scanner.nextInt();
                int weightT = scanner.nextInt();
                int valueT = scanner.nextInt();
                break;

            case 'a':
                index = scanner.nextInt();
                type = scanner.next();
                int creatureA = scanner.nextInt();


            }
        } 

    } catch (IOException e) {
        e.printStackTrace();
    }
}
VS

好的,我已经读过了,并且玩过一些,我认为我可以使用if-else循环。然而,我得到了一些错误(在代码下面)

错误:

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at SorcerersCave.main(SorcerersCave.java:33)

我想你可以一行一行地读文件。获取要切换的第一个字符,如下所示:

switch(line.charAt(0)) {

    case 'a':
        //...
    case 'p':
       //...
    //...
}
使用提供字符串数组的
String[]parts=line.split(“:”)
,而不是使用分隔符并执行
.next()
。并修剪每个元素,对于整数,使用
Integer.parseInt(parts[index].trim())

另外,您不需要
while(scanner.hasNext())
。取而代之的是

while (scanner.hasNextLine()) {
    String line = scanner.nextLine();
    //split
    //switch

如果您知道什么不起作用,则更容易提供帮助:)编译错误?感谢您提供的信息和建议!我按照你的建议换了箱子&真管用!我同时也改变了这一点——这同样有效。我仍然对分隔符有点困惑。。。我会继续努力。分隔符适用于next(),但nextLine()和split在您的情况下更好。
while (scanner.hasNextLine()) {
    String line = scanner.nextLine();
    //split
    //switch