2016-10-10 40 views
0

什麼是Java中的最好的方式找到排除某些字符的字符串的第一部分。有關信息,唯一的共同元素是第一個[。之後的數字,在下一個之前]具有可變長度。最好的方式找到一個字符串的第一部分排除某些字符

例輸入字符串:

john[43] was 
Dave[0] had 
Sally[241] used 

需要的輸出字符串:

john 
Dave 
Sally 
+1

所以你只需要在「[」之前的字符? – Heisenberg

+1

只要繼續抓住角色,直到到達支架?目前還不清楚這裏有什麼困難。 –

+0

正則表達式可以很容易地爲你做到這一點。 –

回答

1

找到你的分隔符字符的索引,並採取從第0指數的子串到該索引。

String s = "John[1234]sadf"; 
System.out.println(s.substring(0, s.indexOf("["))); 
+0

謝謝,我試過上面的,但不得不在末尾加上+1(「[」)+1);我使用它的輸入由於某種原因不喜歡它。然後我現在刪除「[」: Name = Name.replaceAll(「\\ [」,「」); 我會繼續嘗試:) – BlazeUK

+0

我可以看到您的輸入嗎? – Heisenberg

+0

它來自聊天流,它可能是空的,導致它tbh。試着現在審查。 – BlazeUK

0

以下是這樣做的厚顏無恥的方式,然而拆分會返回一個數組。

String firstPart= inputString.split("[")[0]; 

另一種方法是使用子

int index = inputString.indexOf("["); 

然後使用子與該指數創建前的所有字符串。

+0

海森堡的答案涵蓋了indexOf方法,但是我會在這裏留下我的答案,因爲它確實包括拆分方法(授予它較差,但可能對未來的參考有用) – Chains

0

林假設它可能爲你john[43] was之前有文字,也許像as soon as john[43] was

使用正則表達式,您可以創建一個字符串列表,將是這樣的:

List<String> allMatches = new ArrayList<String>(); 
Matcher m = Pattern.compile("([A-Za-z])*\[\d*\]") 
    .matcher(yourInputStringHere); 
while (m.find()) { 
    allMatches.add(m.group()); 
} 
  • 約翰[43]
  • 戴夫[0]
  • 薩利[241]

這確保從輸入的開頭沒有選擇額外的字符或空格。

然後遍歷你可以做些事情,例如,

for (String s: allMatches){ 
    System.out.println(s.substring(0, s.indexOf("["))); 
} 
相關問題