我想拆分字符串:“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
答案 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));
}
基本上,最好使用正则表达式来做这些事情。