首页 > 解决方案 > 在扫描仪中返回包含字符 c 的字符串

问题描述

尝试创建一个findNewLineWithChar()返回 String 并接受 Scannerscn和 char的方法c。它返回包含c.

我尝试使用字符串来存储 currentLine 的值,但它似乎使我的代码复杂化并且无论如何都没有提供任何答案。我很想使用 String[],但我得到了 NullPointerException。我到底在做什么错?

public static String findLineWithChar(Scanner scn, char c) {
     /*
      * findLineWithChar returns line in scanner if line has char c
      * @param scanner
      * @param c
      */

        String result = "";
        String[] stringArray = new String[10]; //accepts max 10 lines

        int counter = 0; //populate string array from scn
        while(scn.hasNextLine()) {
            stringArray[counter] = scn.nextLine();
            counter++;
        }

        //iterate through each element in string array
        for (int i = 0; i < 10; i++) {
            if (stringArray[i].contains(c + "")) {
                result = stringArray[i];
                System.out.println(stringArray[i]);
                break;
            } else {
                result = "";
            }
        }

        return result;
    }

如果我给它一个真实的陈述,它会工作, findLineWithChar(new Scanner("Look here!\nLook there!\nExtra extra!"), 'x')返回Extra extra!,但是 findLineWithChar(new Scanner("看这里!\n看那里!\n额外的额外!"),'q') 返回 NullPointerException。我该如何处理?

标签: javajava.util.scanner

解决方案


首先,Javadoc 注释位于方法之前(并以 开头/**)。其次,这里不需要数组;只需计数以确保您不消耗超过十行(假设这是必要的)。我不会设置返回变量并打破循环,而是在找到匹配行时返回。我也更愿意String.indexOf(int)建立一个字符String进行比较。并且,在没有匹配项时添加默认返回值。喜欢,

/**
 * findLineWithChar returns line in scanner if line has char c
 * 
 * @param scanner
 * 
 * @param c
 */
public static String findLineWithChar(Scanner scn, char c) {
    int counter = 0;
    while (scn.hasNextLine() && counter < 10) {
        String line = scn.nextLine();
        if (line.indexOf(c) > -1) {
            return line;
        }
        counter++;
    }
    return "";
}

推荐阅读