2016-01-31 51 views
1

我有一個問題! 我正在使用StringTokenizer,但我不明白我怎麼可以把'空間'作爲一個標記! 這是我的方法的一個例子:StringTokenizer和令牌'空間'

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



} 
} 

但是當它發現「空間」它中斷了該方法的執行。

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

OUTPUT: 1)>hihowareyou< 2)>hihow<

謝謝

回答

0

您是否嘗試過在String類分割法?

在您的示例中,當您執行sc.next()時,它會爲您提供按空格分隔的文本。 因此,當你輸入「嗨,你好嗎」sc.next()只返回「嗨,怎麼樣」 它與StringTokenizer沒有問題,使用sc.nextLine()而不是sc.next()。這應該會給你你正在預測的結果。

+0

不,但我想了解如何使用StringTokenizer做到這一點! 我的教授以與我的相同方式使用StringTokenizer – DarkPassenger

+0

非常感謝您使用sc.nextLine()而不是sc.next() – Sathiesh

+0

。我不知道這一點,我認爲他們是同樣的事情。現在我將深入學習。 非常感謝:) – DarkPassenger

0

scanner使用空格作爲其默認分隔符。因此,當您撥打sc.next()時,它只會在空格之前返回輸入的第一部分。你可以告訴它包括整個線路是這樣的:

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

其中「\ r \ n」在Windows操作系統匹配換行符

編輯:最好使用lineSeparator方法,這樣可以在任何操作系統上工作。

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

編輯2:或者更好的(看了@ Sathiesh的答案),使用sc.nextLine()