如何获取某个字符的子字符串后跟一个数字?

时间:2014-01-20 20:11:23

标签: java string

在Java中,我如何获得某个字符后跟数字的子字符串?

字符串如下所示:

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

我希望子串直到(243),每次调用时括号内的数字总是在变化。

6 个答案:

答案 0 :(得分:2)

使用正则表达式:

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

这意味着找到以(,然后是任意数量的数字,然后是字符)开头的子字符串。然后用空字符串“”替换子字符串。

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

答案 1 :(得分: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
}

答案 2 :(得分:0)

您可以使用String.replaceAll()

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

答案 3 :(得分:0)

我认为你实际上可以做类似的事情:

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

假设该行的最后一件事是括号中的数字。

答案 4 :(得分: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;
}

答案 5 :(得分:0)

使用正则表达式可以用。

解决
public class RegExParser {

    public String getTextPart(String s) {

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

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

    }
}

简单且性能良好。