StringTokenizer 和令牌 'space'

StringTokenizer and token 'space'

我有一个问题! 我正在使用 StringTokenizer 但我不明白如何将 'space' 作为标记! 这是我的方法的一个例子:

import java.util.*;

public class miaProva{
public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    System.out.println("Write phrase");
    String s=sc.next();
    StringTokenizer st=new StringTokenizer(s, " ,.");
    StringBuilder sb=new StringBuilder();
    sb.append('>');
    while(st.hasMoreTokens()){
        sb.append(st.nextToken());
    }
    sb.append('<');
    System.out.println(sb);



}
}

但是当它找到 'space' 时它会中断方法的执行。

输入: 1) hi,how,are.you 2) hi,how are you

输出: 1) >hihowareyou< 2) >hihow<

谢谢

您是否尝试过字符串 class 中的拆分方法?

在您的示例中,当您执行 sc.next() 时,它会为您提供由 space 分隔的文本。 因此,当您键入 "Hi,how you are" 时,sc.next() returns 仅 "hi,how" 这不是 StringTokenizer 的问题,使用 sc.nextLine() 而不是 sc.next()。那应该会给你你期待的结果。

scanner 使用白色 space 作为其默认分隔符。因此,当您调用 sc.next() 时,它只会 returns 在 space 之前输入的第一部分。你可以让它像这样包含整行:

    Scanner sc = new Scanner(System.in);
    sc.useDelimiter("\r\n");

其中“\r\n”匹配 newline Windows OS.

编辑: 最好使用 lineSeparator 方法,这样可以在任何操作系统上运行。

    Scanner sc = new Scanner(System.in);
    sc.useDelimiter(System.lineSeparator());

edit 2: 或者更好(阅读@Sathiesh 的回答),使用 sc.nextLine().