在java中拆分一个字符串两次

时间:2014-02-04 01:58:27

标签: java arrays split

我想拆分字符串:“Attack Potion [1]”,这样我只留下了“1”的数字。

我试过这个,但它不起作用:

public static void main(String[] args) {
    System.out.println("" + splitter("Attack Potion[1]"));

}

public static int splitter(String i) {
    String[] splitOne = i.split("[");
    String[] splitTwo = splitOne[1].split("]");
    int extractedNumber = Integer.parseInt(splitTwo[0]);
    return extractedNumber;
}

我希望输出为:

1

8 个答案:

答案 0 :(得分:2)

你需要转义[]字符,因为they're special characters in regular expressions. 你需要两个斜杠,因为单个反斜杠用于表示某种转义序列(即:\ n换行,等等。)

尝试以下方法:

String[] splitOne = i.split("\\[");
String[] splitTwo = splitOne[1].split("\\]");

或者,您可以使用Pattern.quote

示例:

String[] splitOne = i.split(Pattern.quote("["));

答案 1 :(得分:1)

您应该通过拨打String#split("[")来替换您对split("\\[")的来电。

为什么我split("\\[")

String#split适用于正则表达式,但[不是正则表达式中的标准字符。 要实现这一点,需要使用\[ 转义。但是,在Java String中,\也不是标准字符,也需要进行转义。 因此,只需在[上拆分,使用的Java字符串为"\\["

答案 2 :(得分:1)

split使用正则表达式作为参数,而正则表达式[]是特殊字符,可创建像[a-z]这样的字符类。要使它们成为简单的文字,你需要逃避它们。您可以使用"\\["\\]执行此操作(如果之前没有未关闭的元字符],则实际上您无需转义[。所以您可以尝试< / p>

String[] splitOne = i.split("\\[");
String[] splitTwo = splitOne[1].split("]");

甚至使用|(表示OR)并将]添加到您的第一次拆分

String[] splitOne = i.split("\\[|]");
int extractedNumber = Integer.parseInt(splitOne[1]);
//                                     ^-use result from splitOne

答案 3 :(得分:1)

我会使用这个正则表达式:

String string = "Attack Potion[100]";
System.out.println(string.replaceAll("[^0-9]", ""));

<强>输出:

100

答案 4 :(得分:0)

划界为我工作。

String[] splitOne = i.split("\\[");

答案 5 :(得分:0)

你需要像这样逃避(“\]”),(“\ [”);

public static void main(String[] args) {
        System.out.println("" + splitter("Attack Potion[1]"));

    }

    public static int splitter(String i) {
        String[] splitOne = i.split("\\[");
        String[] splitTwo = splitOne[1].split("\\]");
        int extractedNumber = Integer.parseInt(splitTwo[0]);
        return extractedNumber;
    }

<强>输出

1

答案 6 :(得分:0)

对于正则表达式,您必须转义[]个字符,因为它们是正则表达式分隔符的一部分。所以你需要这样做:

String[] splitOne = i.split("\\[");
String[] splitTwo = splitOne[1].split("\\]");

但是,您甚至不需要再拆分它。如果您确定[之后的数字只有一位数,那么您可以这样做:

public static int splitter(String i) {
    String[] splitOne = i.split("\\[");
    int extractedNumber = Integer.parseInt(splitOne[1].substring(0,1));
    return extractedNumber;
}

使用子字符串仅解析第一个数字。

答案 7 :(得分:0)

检查下面的代码段。它应该工作。

String pattern = "(.*\\[)(\\d+)(\\])";
Pattern regc = Pattern.compile(pattern);
String tomatch = "Attack Potion[1]";
Matcher matcher = regc.matcher(tomatch);
if (matcher.find() && matcher.groupCount() == 3){
    System.out.println(matcher.group(2));
}

基本上,最好使用正则表达式来做这些事情。