2013-07-10 79 views
2

有沒有一種方法可以獲取由Method Scanner在Java中獲取的字符串中的令牌數?用java掃描器獲取字符串中的令牌數

我的意思是,我可以使用s = sc.nextLine()作爲一個字符串獲得輸入行。但在這個字符串我不能使用lenght()方法,因爲它給了我總字符數(我認爲)。

現有任何標準方法來獲取令牌的數量嗎? 在此先感謝

+1

我覺得不存在這樣的方式。掃描儀在您輸入密碼時爲您提供下一個標記。這意味着,它不知道它有多少令牌。 – Eugene

回答

6

試試這個:

int frequency = new StringTokenizer(myString, " ").countTokens(); 

欲瞭解更多詳情,請參見StringTokenizer

+0

謝謝@Achintya Jha – alessandrob

+0

@Markviduka歡迎您:) –

0

您可以使用Matcher

Pattern pattern = Pattern.compile(token); 
Matcher matcher = pattern.matcher(s); 
int count = 0; 
// Check all occurrences 
while (matcher.find()) { 
    ++count; 
} 
2

不幸的是,Scanner無法從輸入中消耗這些令牌來進行令牌計數。因此,爲了訪問這些令牌,你必須將它們保存在一個列表:

List<String> tokens = new LinkedList<String>(); 
Scanner sc = new Scanner(System.in); 
int count = 0; 
while(sc.hasNext()) { 
    tokens.add(sc.next()); 
    count++; 
} 
System.out.println("Number of tokens: "+count); 
0

你可以使用split方法進行管理:

public static int getTokenCount(String input) { 
    if (input == null) { 
     return 0; 
    } 
    input = input.trim(); 
    if (input.isEmpty()) { 
     return 0; 
    } 
    return input.split("\\s+").length; 
} 
1

使用split(),它支持正則表達式,不像StringTokenizer

int nbOfTokens = sc.nextLine().split(sc.delimiter().pattern()).length; 
0
import java.io.*; 
import java.util.*; 
public class Solution { 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     String s = scan.nextLine(); 
     String delims= "[ .,'[email protected]]+"; 
     int length1=s.split(delims).length; 

     System.out.println(length1); 
     String[] tokens=s.split(delims); 
     for(String token : tokens){ 
      System.out.println(token); 

     } 


     scan.close(); 
    } 
} 
+1

您能否也請解釋代碼?由於代碼只有答案,可能會解決問題,但不幫助別人理解。 –