2014-01-20 73 views
0

在Java中,我將如何獲得某個字符的子字符串,然後是數字?如何獲取某個字符的子字符串後跟一個數字?

的字符串看起來是這樣的:

To be, or not to be. (That is the question.) (243) 

我想要的子串,直到(243),其中括號內的數字一直在變化我每次通話時間。

+0

在字符串的其他位置可以有數字嗎? – PurpleVermont

+0

你的意思是正則表達式'\((\ d +)\)'? – chrylis

回答

2

使用正則表達式:

newstr = str.replaceFirst("\(\d+\)", ""); 

這意味着找到一個字符串開頭(然後是任意數量的數字,然後是字符)。然後用空字符串「」替換子字符串。

參考:java.lang.String.replaceFirst()

+0

我沒有意識到String類有內建的方法(在這種情況下稱爲replaceFirst),它可以識別正則表達式,這是我真正想要的答案。 – djangofan

+0

我想你可能想要將正則表達式定位到行的末尾$如果字符串中恰好有加括號的數字,比如'有四(4)盞燈!(345)' – PurpleVermont

0

你可以將它與正則表達式匹配,並獲得正則表達式的索引。然後用它來獲取字符串中的索引。

這方面的一個例子是Can Java String.indexOf() handle a regular expression as a parameter?

Pattern pattern = Pattern.compile(patternStr); 
Matcher matcher = pattern.matcher(inputStr); 
if(matcher.find()){ 
    System.out.println(matcher.start());//this will give you index 
} 
+0

我會試試這個。謝謝,它看起來像答案。 – djangofan

0

您可以使用String.replaceAll()

String s = "To be, or not to be. (That is the question.) (243)"; 
String newString = s.replaceAll("\\(\\d+\\).*", ""); 
0

我覺得可以真正地做一些事情,如:

mystring.substring(0,mystring.lastIndexOf"(")) 

假設最後線上的東西就是括號中的數字。

+0

我不確定你是否需要在''引號內或不是''中引用''你也可以將它指定爲'char'而不是一個字符串,這可能會更有效。 – PurpleVermont

0

你可以使用一個for循環,並在數字前加字符到一個單獨的字符串

String sentence = "To be, or not to be. (That is the question.) (243)"; 

public static void main(String[] args) { 
    String subSentence = getSubsentence(sentence); 
} 

public String getSubsentence(String sentence) { 
    String subSentence = ""; 
    boolean checkForNum = false; 
    for (int i = 0; i < sentence.length(); i++) { 
     if (checkForNum) { 
      if (isInteger(sentence.getSubstring(i, i+1))) return subSentence; 
      checkForNum = false; 
     } else { 
      if (sentence.getSubstring(i, i+1).equals("(")) checkForNum = true; 
      else subSentence += sentence.getSubstring(i, i+1); 
     } 
    } 
    return subSentence; 
} 

public boolean isInteger(String s) { 
try { 
    Integer.parseInt(s); 
} catch(NumberFormatException e) { 
    return false; 
} 
    return true; 
} 
0

使用正則表達式這可以解決。

public class RegExParser { 

    public String getTextPart(String s) { 

     String pattern = "^(\\D+)(\\s\\(\\d+\\))$"; 

     String part = s.replaceAll(pattern, "$1"); 
     return part; 

    } 
} 

簡單和性能很好。

相關問題