Вопрос по java – Java: Сканер останавливается на новой линии

1

Я пытаюсь отсканировать текстовые файлы и добавить их на карту, карту и все работает.However, the scanner seems to be stopping when it comes to a 'enter' in the text file, or a blank line. This is my problem

вот мой блок кода для сканера / картографа

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);
                }
            } 
         }
     }
}

Спасибо за любую помощь!

Никаких ошибок, просто не ожидаемое поведение. rtheunissen
Какую ошибку вы получаете? UVM

Ваш Ответ

4   ответа
0

Не работая с Java в течение очень долгого времени, я могу быть далеко, но похоже, что вы звонитеinputText = input.nextLine(); ровно один раз, поэтому имеет смысл, что вы получаете только одну строку. Предположительно вы хотите позвонитьnextLine() в цикле, так что он продолжает давать вам строки, пока не дойдет до конца файла.

0

Вsplit("[ \n\t\r,.;:!?(){}]") добавлять\f

0
String contentsOfWholeFile = new Scanner(file).useDelimiter("\\Z").next();
1

Вы должны сканировать внутри цикла, пока он не достигнет конца файла, например:

StringBuilder builder = new StringBuilder();
while(input.hasNextLine()){
    builder.append(input.nextLine());
    builder.append(" "); // might not be necessary
}
String inputText = builder.toString();

Альтернатива использованиюsplit может быть использоватьРазделитель сScanner и использоватьhasNext() а такжеnext() вместоhasNextLine() а такжеnextLine(), Попробуйте, посмотрите, работает ли это.

Например:

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

Кроме того, отметим, что для созданияJFileChooser каждый раз:

class OneButtonListener implements ActionListener
{
    private final JFileChooser oneFC = new JFileChooser();

    @Override
    public void actionPerformed(ActionEvent evt)
    {
Я больше не получаю сообщение об ошибке, но она, похоже, не проходит первую строку.String inputText = builder.toString(); эта строка вставляет данные из компоновщика в строку inputText правильно? Убедившись, что это не тот строитель, который мне нужно позвонить позже Quallssm
Спасибо за пример, однако я не уверен, как его реализовать, что такое "append" делать? Я использовал append для вывода в текстовую область, но здесь я сохраняю ее, чтобы поместить в карту. Quallssm
Извините, что это было до того, как вы отредактировали, & apos; append & apos; все еще ошибается, хотя также спасибо за всю помощь Quallssm
Виноват. Проверьте окончательное редактирование.
Обратите внимание, что я используюStringBuilder, Это позволяет использовать конкатенацию строк более эффективно, чем использование+= добавить строки. Чтобы получить строку изStringBuilder, просто позвониtoString() наStringBuilder, Прочитайте пример еще раз, может быть?

Похожие вопросы