2016-04-30 41 views
-1

這裏是我的字符串從字符串中提取特定數量

輸入:

22 TIRES (2 defs) 

1 AP(PEAR + ANC)E (CAN anag) 

6 CHIC ("SHEIK" hom) 

預期輸出:

22 TIRES 

1 APPEARANCE 

6 CHIC 

實際輸出:

TIRES 

APPEARANCE 

CHIC 

我嘗試使用下面的代碼和得到了上面的輸出。

String firstnames =a.split(" \\(.*")[0].replace("(", "").replace(")", "").replace(" + ", 
         ""); 

任何想法如何提取數字?我不想要輸入「22 TIRES(2 defs)」中的括號之後的數字。我需要輸出爲「22 TIRES」任何幫助將是偉大的!

+1

你爲什麼要這麼做? –

回答

0

我會使用單個replaceAll函數。

str.replaceAll("\\s+\\(.*|\\s*\\+\\s*|[()]", ""); 

DEMO

  • \\s+\\(.*,此相匹配的空間和與下面(字符加上所有剩餘字符跟隨這種模式。所以你的例子中的(CAN anag)部分得到了匹配。

  • \\s*\\+\\s*匹配+以及前面和後面的空格。

  • [()]匹配打開或關閉的括號。

  • Atlast將所有匹配的字符替換爲空字符串。

+0

它的工作原理!你能解釋它是如何工作的嗎? @Avinash Raj – Anusha

+0

嗨@Anusha完成了.. –

+0

你能解釋一下代碼的確切含​​義@Avinash Raj – Anusha

0

我這樣做有點不同

String line = "22 TIRES (2 defs)\n\n1 AP(PEAR + ANC)E (CAN anag)\n\n6 CHIC (\"SHEIK\" hom)"; 
String pattern = "(\\d+\\s+)(.*)\\("; 
Pattern r = Pattern.compile(pattern); 
Matcher m = r.matcher(line); 
while (m.find()) { 
    String tmp = m.group(1) + m.group(2).replaceAll("[^\\w]", ""); 
    System.out.println(tmp); 
} 

Ideone Demo

相關問題