我想分割一个字符串,但我想拆分它删除数字,当然,后面的字符,它不等于指定的数字。
这是我的代码:
32 X 28 Y 32 X 40 Y 36 X 32 Y 32 X 24 X 32 X
更好的解释:
样品:
32 X or 32X // Whatever
32 X
32 Y
32 X
32 X
如果我想要所有32个数字和后面的字符,它应该返回:
{{1}}
我坚持让它发挥作用,任何帮助都将受到赞赏。
答案 0 :(得分:2)
我会使用Pattern
和Matcher
来解决它,而不是尝试拆分字符串。
修改:更新了代码,以显示如何收集List<String>
并转换为String[]
,如果需要。
public static void main(String[] args)
{
// the sample input
String x = "32 X 28 Y 32 X 40 Y 36 X 32 Y 32 X 24 X 32 X";
// match based upon "32". This specific match can be made into
// a String concat so the specific number may be specified
Pattern pat = Pattern.compile("[\\s]*(32\\s[^\\d])");
// get the matcher
Matcher m = pat.matcher(x);
// our collector
List<String> res = new ArrayList<>();
// while there are matches to be found
while (m.find()) {
// get the match
String val = m.group().trim();
System.out.println(val);
// add to the collector
res.add(val);
}
// sample conversion
String[] asArray = res.toArray(new String[0]);
System.out.println(Arrays.toString(asArray));
}
根据样本输入返回输出:
32 X
32 X
32 Y
32 X
32 X
[32 X,32 X,32 Y,32 X,32 X]
答案 1 :(得分:1)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Parser {
public static void main(String[] args) {
String txt="32 X 28 Y 32 X 40 Y 36 X 32 Y 32 X 24 X 32 X";
String re1="(\\d+)"; // Integer Number 1
String re2="(\\s+)"; // White Space 1
String re3="(.)"; // Any Single Character 1
Pattern p = Pattern.compile(re1+re2+re3,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(txt);
while (m.find())
{
String int1=m.group(1); //here's the number
String c1=m.group(3); //here's the letter
if (Integer.parseInt(int1) == 32) {
System.out.println(int1.toString()+" "+c1.toString());
}
}
}
}