Java:扫描仪停在新线

Java:扫描仪停在新线,java,java.util.scanner,Java,Java.util.scanner,我正在尝试扫描文本文件并将它们添加到地图中,地图和所有内容都正常工作但是,当遇到文本文件中的“回车”或空行时,扫描仪似乎停止了。这是我的问题 这是我的扫描器/映射器代码块 class OneButtonListener implements ActionListener { @Override public void actionPerformed(ActionEvent evt) { final JFileChooser oneFC = new JFil

我正在尝试扫描文本文件并将它们添加到地图中,地图和所有内容都正常工作但是,当遇到文本文件中的“回车”或空行时,扫描仪似乎停止了。这是我的问题

这是我的扫描器/映射器代码块

class OneButtonListener implements ActionListener
{
    @Override
    public void actionPerformed(ActionEvent evt)
    {
        final JFileChooser oneFC = new JFileChooser();
        oneFC.showOpenDialog(AnalysisFrame.this);
        String newLine = null;
        oneFC.getName(null);
        int returnVal = 0;
        File fileOne = oneFC.getSelectedFile();

        Scanner input = null;        
        try {
            input = new Scanner(fileOne);
        } 
        catch (FileNotFoundException ex) {
            Logger.getLogger(AnalysisFrame.class.getName()).log(Level.SEVERE, null,
                            ex);
        }                       
        inputText = input.nextLine(); 
        String[] words = inputText.split("[ \n\t\r,.;:!?(){}]");

        for(int i = 0; i < words.length; i++){
            key = words[i].toLowerCase(); 

            if (words[i].length() > 1){
                if (mapOne.get(key) == null){
                    mapOne.put(key, 1);
                }
                else {
                    value1 = mapOne.get(key).intValue();
                    value1++;
                    apOne.put(key, value1);
                }
            } 
         }
     }
}
class OneButtonListener实现ActionListener
{
@凌驾
已执行的公共无效操作(操作事件evt)
{
final JFileChooser oneFC=新的JFileChooser();
oneFC.showOpenDialog(AnalysisFrame.this);
字符串换行符=null;
oneFC.getName(空);
int returnVal=0;
File fileOne=oneFC.getSelectedFile();
扫描仪输入=空;
试一试{
输入=新扫描仪(fileOne);
} 
捕获(FileNotFoundException ex){
Logger.getLogger(AnalysisFrame.class.getName()).log(Level.SEVERE,null,
ex);
}                       
inputText=input.nextLine();
String[]words=inputText.split(“[\n\t\r,.;:!?(){}]”);
for(int i=0;i1){
if(mapOne.get(key)==null){
地图一。放置(键,1);
}
否则{
value1=mapOne.get(key.intValue();
value1++;
apOne.put(键,值1);
}
} 
}
}
}

谢谢你的帮助

您应该在循环内扫描,直到循环到达文件末尾,例如:

StringBuilder builder = new StringBuilder();
while(input.hasNextLine()){
    builder.append(input.nextLine());
    builder.append(" "); // might not be necessary
}
String inputText = builder.toString();
scanner.useDelimiter("[ \n\t\r,.;:!?(){}]");
ArrayList<String> tokens = new ArrayList<String>();
while(scanner.hasNext()){
    tokens.add(scanner.next());
}

String[] words = tokens.toArray(new String[0]); // optional
使用
split
的另一种替代方法是将a与
扫描仪一起使用,并使用
hasNext()
next()
而不是
hasNextLine()
nextLine()
。试试看,看看是否有效

例如:

StringBuilder builder = new StringBuilder();
while(input.hasNextLine()){
    builder.append(input.nextLine());
    builder.append(" "); // might not be necessary
}
String inputText = builder.toString();
scanner.useDelimiter("[ \n\t\r,.;:!?(){}]");
ArrayList<String> tokens = new ArrayList<String>();
while(scanner.hasNext()){
    tokens.add(scanner.next());
}

String[] words = tokens.toArray(new String[0]); // optional

应在循环内扫描,直到循环到达文件末尾,例如:

StringBuilder builder = new StringBuilder();
while(input.hasNextLine()){
    builder.append(input.nextLine());
    builder.append(" "); // might not be necessary
}
String inputText = builder.toString();
scanner.useDelimiter("[ \n\t\r,.;:!?(){}]");
ArrayList<String> tokens = new ArrayList<String>();
while(scanner.hasNext()){
    tokens.add(scanner.next());
}

String[] words = tokens.toArray(new String[0]); // optional
使用
split
的另一种替代方法是将a与
扫描仪一起使用,并使用
hasNext()
next()
而不是
hasNextLine()
nextLine()
。试试看,看看是否有效

例如:

StringBuilder builder = new StringBuilder();
while(input.hasNextLine()){
    builder.append(input.nextLine());
    builder.append(" "); // might not be necessary
}
String inputText = builder.toString();
scanner.useDelimiter("[ \n\t\r,.;:!?(){}]");
ArrayList<String> tokens = new ArrayList<String>();
while(scanner.hasNext()){
    tokens.add(scanner.next());
}

String[] words = tokens.toArray(new String[0]); // optional

很长一段时间没有使用Java,我可能有点不对劲,但看起来你调用了
inputText=input.nextLine()正好一次,所以只有一行是有道理的。大概你想在一个循环中调用
nextLine()
,这样它会一直给你行,直到它到达文件的末尾。

很久没有使用Java了,我可能会觉得不对劲,但看起来你调用
inputText=input.nextLine()正好一次,所以只有一行是有道理的。大概您想在循环中调用
nextLine()
,这样它会一直给您行,直到到达文件末尾。

拆分(“[\n\t\r,.;:!?(){}]”中

String contentsOfWholeFile = new Scanner(file).useDelimiter("\\Z").next();
拆分([\n\t\r,.;:!?(){}])中添加
\f


add
\f

谢谢您的示例,但是我不确定如何实现它,“append”在做什么?我曾使用“附加到输出到文本区域”,但在这里我保留它以将其放置到地图中。请注意,我使用的是
StringBuilder
。这使得字符串连接比使用
+=
附加字符串更有效。要从
StringBuilder
获取字符串,只需在
StringBuilder
上调用
toString()
。再次阅读该示例可能?O很抱歉,在您编辑之前,“附加”仍然有错误,但也感谢您的帮助。我不再收到错误,但它似乎仍然没有超过第一行<代码>字符串inputText=builder.toString()此行在inputText字符串中插入来自生成器的数据是否正确?确保它不是我稍后需要调用的生成器,使用第二个示例,该示例使用
ArrayList
而不是
StringBuilder
split
。执行类似于
word=input.next()的操作;System.out.println(word);添加(单词)以查看发生了什么。我已经在示例中添加了它,请记住稍后再将其取出。感谢这个示例,但是我不确定如何实现它,“append”在做什么?我曾使用“附加到输出到文本区域”,但在这里我保留它以将其放置到地图中。请注意,我使用的是
StringBuilder
。这使得字符串连接比使用
+=
附加字符串更有效。要从
StringBuilder
获取字符串,只需在
StringBuilder
上调用
toString()
。再次阅读该示例可能?O很抱歉,在您编辑之前,“附加”仍然有错误,但也感谢您的帮助。我不再收到错误,但它似乎仍然没有超过第一行<代码>字符串inputText=builder.toString()此行在inputText字符串中插入来自生成器的数据是否正确?确保它不是我稍后需要调用的生成器,使用第二个示例,该示例使用
ArrayList
而不是
StringBuilder
split
。执行类似于
word=input.next()的操作;System.out.println(word);添加(单词)以查看发生了什么。我已经在示例中添加了这一点,请记住稍后再将其删除。没有错误,只是没有预期的行为。没有错误,只是没有预期的行为。