我有一个变量String,它包含我需要的值和分割器。问题是,字符串的长度是可变的,也是分离器的类型。它们通过XML文件到达。
字符串将如下所示:
1+"."+20+"."+51+"."+2+"name.jpg"
但也可以是:
1+"*"+20+"*"+51+"name.jpg"
坚实的因素是: 数字是我需要检索的id。 分割器值将在“引号”之间。
id的数量未知,可以是一个,可以是200 用于拆分的值可以是一切,但总是在两个引号之间。
我正在寻找一种方法将字符串拆分为“.
”,而不是点(.
)给出一个通配符,可以是1个字符或多个。
注意:引号之间的值可以是任何值!甚至不必是单个字符
答案 0 :(得分:2)
尝试通过正则表达式进行拆分,例如:
String regex = "\\+?\"[^\"]*\"\\+?";
System.out.println(Arrays.toString( "1+\".\"+20+\".\"+51+\".\"+2+\"name.jpg\"".split( regex ) ));
System.out.println(Arrays.toString( "1+\"*\"+20+\"*\"+51+\"name.jpg\"".split( regex ) ));
输出:
[1, 20, 51, 2]
[1, 20, 51]
正则表达式将匹配任意2个双引号,其间包含非双引号字符,并且前面/后面是可选的加号。您可以扩展它以允许空白,例如"\\s*\\+?\\s*\"[^\"]*\"\\s*\\+?\\s*"
。分割器中唯一不允许的是双引号。
如果您还需要该名称,您可以尝试在正则表达式中定义潜在的分割器,
例如
"(\\+?\"[\\.\\*]*\"\\+?)|\\+?\""
请注意,在这种情况下,您必须考虑名称周围的引号,即要分割2+"name.jpg"
您必须添加替代\+?"
(双引号前面带有可选加号)。
<强>更新强>
其他示例(输入 - >输出)
5+".."+272+"..."+21+"splitter"+2+"name.jpg" --> [5, 272, 21, 2]
444+"()"+0+"abc"+51+"__"+2+"name.jpg" --> [444, 0, 51, 2]
1+"."+20+"."+51+"."+2+"name.jpg" --> [1, 20, 51, 2]
1+"*"+20+"*"+51+"name.jpg" --> [1, 20, 51]
答案 1 :(得分:1)
String oldStr=1+"."+20+"."+51+"."+2+"name.jpg";
String newStr= oldStr.replace("name.jpg",""); // or you can use regex such as : oldStr.replaceAll("(\w+.\w+)","");
String[] array;
array=newStr.split(".");
if(array==null || array.length==0){
array=newStr.split("*");
}
答案 2 :(得分:1)
所以,只要我说得对,可能的文件名/字符串值是:
1.20.51.2name.jpg
1*20*51*name.jpg
右?
所以更一般的你可以说:一些未知数量的数字,由一个非数字字符分开?
您可以对每个字符串执行RegEx语句:\d+
。
如果全局执行,您将获得每个数字的列表。
1.20.51.2name.jpg
我得到了
1, 20, 51, 2
答案 3 :(得分:0)
使用此:
String x = 1+"."+20+"."+51+"."+2+"name.jpg";
String y = 1+"*"+20+"*"+51+"name.jpg";
System.out.println(Arrays.toString(x.split("\\.|\\*")));
System.out.println(Arrays.toString(y.split("\\.|\\*")));
会给你以下输出:
[1, 20, 51, 2name, jpg]
[1, 20, 51name, jpg]