如何用令牌分割用户的输入?

时间:2012-12-14 10:53:40

标签: java user-input token java.util.scanner

我需要你的建议才能做某事...我想拿用户的输入线,因为我已经在我的程序中使用扫描仪...但我想将每个命令(单词)拆分为令牌......我不知道该怎么做,直到现在我正在玩子字符串但是如果用户例如按两次空格键按钮一切都错了!!!!!

例如:
请插入一个命令:我20岁

使用子字符串或.split(“”),它运行但考虑有:

请插入一个命令:我20岁

这就是我需要你的建议的原因....问题是我如何用令牌分割用户的输入。

3 个答案:

答案 0 :(得分:6)

好吧,你需要在将字符串行拆分为标记之前将其标准化。最简单的方法是删除重复的空格字符:

line = line.replaceAll("\\s+", " ");

(这也会将所有标签重新替换为单" ")。

答案 1 :(得分:3)

使用StringTokenizer课程。来自API:

  

“[它]允许应用程序将字符串分解为标记... A   StringTokenizer对象在内部维护当前位置   要标记化的字符串。“

API中的以下示例代码将为您提供一个想法:

    StringTokenizer st = new StringTokenizer("this is a test");
    while (st.hasMoreTokens()) {
        System.out.println(st.nextToken());
    }

它产生以下结果:

    this
    is
    a
    test

答案 2 :(得分:0)

好的,所以我所做的代码是要求你插入一个命令,然后它会接受你的命令,然后将它分成任意数量的空格(由于正则表达式)。然后它将这些单词,数字,语音标记等保存为标记。然后,您可以操作for循环中的每个单词。

import java.util.Scanner;

public class CommandReaderProgram{ 

  public static void main(String[] args){
    Scanner userInput = new Scanner(System.in);        
    System.out.println("Please insert a command:");
    String temp = userInput.nextLine();

        while(temp != null){
            String [] tokens = temp.split("\\s+");
            for(String word : tokens){
                System.out.print(word);
                System.out.print(" ");    
            } 
            break;    
        }   
        System.out.print("\n");
 }
}

要测试每个单词,数字和语音标记是否已实际保存为令牌,请更改System.out.print中的字符(“”);代码到任何东西。例如System.out.print(“”);要么 是System.out.print( “ABCDEFG”);它会将这些数据放在每个令牌之间,以证明令牌确实是分开的。

不幸的是我暂时无法在for循环之外调用令牌数组,但是当我弄明白时它会让你知道。

我想知道你想要制作什么类型的节目,因为我认为我们都在尝试制作非常相似的节目。

希望这就是你要找的东西。

问候。