java split()的问题
我有一个字符串:java split()的问题,java,regex,Java,Regex,我有一个字符串: strArray= "-------9---------------"; 我想从字符串中找到9。字符串可能如下所示: strArray= "---4-5-5-7-9---------------"; 现在我只想找出字符串中的数字。我需要值9,4或类似的东西,忽略“-”。我尝试了以下方法: strArray= strignId.split("-"); 但它会出错,因为有多个“-”,我没有得到输出。那么应该使用java的哪些功能呢 我的输入和输出应如下所示: input="-
strArray= "-------9---------------";
我想从字符串中找到9。字符串可能如下所示:
strArray= "---4-5-5-7-9---------------";
现在我只想找出字符串中的数字。我需要值9,4或类似的东西,忽略“-”。我尝试了以下方法:
strArray= strignId.split("-");
但它会出错,因为有多个“-”,我没有得到输出。那么应该使用java的哪些功能呢
我的输入和输出应如下所示:
input="-------9---------------";
output="9";
input="---4-5-5-7-9---------------";
output="45579";
我该怎么办?该
+
是一个“一个或多个”重复的正则元字符,因此模式-+
是“一个或多个破折号”。这将允许您改用str.split(“-+”)
,但您可能会得到一个空字符串作为第一个元素
如果您只想删除所有-
,那么您可以执行str=str.replace(“-”,”)
。这使用的方法执行文本字符串替换,即不执行正则表达式模式
如果您想要一个字符串[]
,每个数字都在它自己的元素中,那么最简单的方法是分两步执行:首先删除所有非数字,然后使用零长度断言将不是字符串开头的所有位置拆分(?!^)
(以防止将空字符串作为第一个元素)。如果您想要一个char[]
,那么您可以直接调用
最后,如果字符串可能很长,最好在find()
循环中使用a来查找数字\d
,或者使用带有分隔符\d*
,即非数字序列(可能为空)。这不会给您一个数组,但您可以使用循环来填充数组(请参阅有效的Java第二版,第25项:首选列表而非数组)
工具书类
- ,
片段
以下是一些例子来说明上述观点:
System.out.println(java.util.Arrays.toString(
"---4--5-67--8-9---".split("-+")
));
// [, 4, 5, 67, 8, 9]
// note the empty string as first element
System.out.println(
"---4--5-67--8-9---".replace("-", "")
);
// 456789
System.out.println(java.util.Arrays.toString(
"abcdefg".toCharArray()
));
// [a, b, c, d, e, f, g]
下一个示例首先删除所有非数字\D
,然后在字符串(?!^)
开头以外的所有位置拆分,以获得一个字符串[]
,每个字符串包含一个数字:
System.out.println(java.util.Arrays.toString(
"@*#^$4@!#5ajs67>?<{8_(9SKJDH"
.replaceAll("\\D", "")
.split("(?!^)")
));
// [4, 5, 6, 7, 8, 9]
split()的常见问题
以下是初学者在处理字符串时遇到的一些常见问题。拆分:
System.out.println(java.util.Arrays.toString(
"a;b;;d;;;g;;".split(";")
));
// [a, b, , d, , , g]
第1课:split
采用正则表达式模式
这可能是初学者最常见的错误:
System.out.println(java.util.Arrays.toString(
"one|two|three".split("|")
));
// [, o, n, e, |, t, w, o, |, t, h, r, e, e]
System.out.println(java.util.Arrays.toString(
"not.like.this".split(".")
));
// []
这里的问题是,|
和
是正则表达式元字符,因为它们是按字面意思匹配的,所以需要通过在前面加反斜杠来转义,反斜杠作为Java字符串文字是“\\”
第2课:split
默认情况下丢弃尾随的空字符串
有时需要保留尾随的空字符串(默认情况下,这些字符串被丢弃split
):
请注意,对于c
、e
、f
,有“缺少”值的插槽,但对于h
和i
则没有。要解决此问题,可以使用负limit
参数
您还可以使用n的正限制
,最多应用n-1次模式(即,数组中的元素不超过n个)
零宽度匹配split
示例
这里有更多关于零宽度匹配结构的拆分示例;这可以用于拆分字符串,但也可以保留“分隔符”
简单分句,保留标点符号:
String str = "Really?Wow!This.Is.Awesome!";
System.out.println(java.util.Arrays.toString(
str.split("(?<=[.!?])")
)); // prints "[Really?, Wow!, This., Is., Awesome!]"
大写字母前拆分(第一个除外!)
下面的相关问题中提供了各种示例
工具书类
相关问题
-
“abcghi”->“abc”、“ghi”、“ghi”、“abcghi”
-
“AnXMLAndXSLT2.0工具”->“一个XML和XSLT2.0工具”
- C版本:
您不使用拆分
拆分就是把东西分隔开来
为此,您希望消除不需要的字符;'-'
解决办法很简单
out=in.replaceAll(“-”和“”) 使用类似的方法将单个值拆分。我宁愿先消除不需要的字符,以避免在结果数组中得到空/空字符串
final Vector nodes = new Vector();
int index = original.indexOf(separator);
while (index >= 0) {
nodes.addElement(original.substring(0, index));
original = original.substring(index + separator.length());
index = original.indexOf(separator);
}
nodes.addElement(original);
final String[] result = new String[nodes.size()];
if (nodes.size() > 0) {
for (int loop = 0; loop smaller nodes.size(); loop++) {
result[loop] = (String) nodes.elementAt(loop);
}
}
return result;
}
如果我想得到一个数组中的输出,其中每个数字都在一个单元格中,那么该怎么办呢?天哪。你是当场写的吗+1以获得极好的响应。
System.out.println(java.util.Arrays.toString(
"a;b;;d;;;g;;".split(";", -1)
));
// [a, b, , d, , , g, , ]
String str = "Really?Wow!This.Is.Awesome!";
System.out.println(java.util.Arrays.toString(
str.split("(?<=[.!?])")
)); // prints "[Really?, Wow!, This., Is., Awesome!]"
String str = "012345678901234567890";
System.out.println(java.util.Arrays.toString(
str.split("(?<=\\G.{4})")
)); // prints "[0123, 4567, 8901, 2345, 6789, 0]"
System.out.println(java.util.Arrays.toString(
"OhMyGod".split("(?=(?!^)[A-Z])")
)); // prints "[Oh, My, God]"
final Vector nodes = new Vector();
int index = original.indexOf(separator);
while (index >= 0) {
nodes.addElement(original.substring(0, index));
original = original.substring(index + separator.length());
index = original.indexOf(separator);
}
nodes.addElement(original);
final String[] result = new String[nodes.size()];
if (nodes.size() > 0) {
for (int loop = 0; loop smaller nodes.size(); loop++) {
result[loop] = (String) nodes.elementAt(loop);
}
}
return result;
}