1

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

例如:
请插入命令:我今年 20 岁

使用 substring 或 .split(" ") ,它运行但考虑具有:

请插入命令:我今年 20 岁

这就是为什么我需要您的建议....问题是我如何将用户的输入与令牌分开。

4

3 回答 3

6

好吧,您需要在将字符串拆分为标记之前对其进行规范化。最简单的方法是删除重复的空白字符:

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

(这也会将所有选项卡替换为单个" ")。

于 2012-12-14T10:57:43.213 回答
3

使用StringTokenizer类。从 API :

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

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

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

它产生以下结果:

    this
    is
    a
    test
于 2012-12-14T11:55:07.993 回答
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 循环之外调用令牌数组,但当我弄清楚时会告诉你。

我想听听您正在尝试制作什么类型的程序,因为我认为我们都在尝试制作非常相似的东西。

希望这是您正在寻找的。

问候。

于 2012-12-14T14:08:08.590 回答