gpt4 book ai didi

Java 字符串分割/操作

转载 作者:行者123 更新时间:2023-12-01 04:43:13 24 4
gpt4 key购买 nike

我需要用 Java 编写一个方法,该方法可以采用字符串文本参数和返回字符串数组的字符串“正则表达式”参数数组。

我希望返回的数组基本上执行 String.split 的操作,但使用多个字符串正则表达式,而不是剥离正则表达式,而是将其保留在数组中。

示例:
输入:“int a=10; a++;”
正则表达式:“int”、“;”、“++”、“=”
输出:“int”、“a”、“=”、“10”、“;”、“a”、“++”、“;”

我尝试了一些方法,包括以下内容,但没有任何效果

public static String[] splitIntoBits(String in, String[] regex)
{
List<String> bitList = new ArrayList<String>();

for(int i = 0; i < in.length(); i++)
{
int lastIndex=0;
//Check that character against all regexes
for(int j = 0; j < regex.length; j++)
{
if(in.substring(i).startsWith(regex[j]))
{
bitList.add(in.substring(lastIndex, i));
lastIndex=i;
}
}
}

return bitList.toArray(new String[0]);
}

最佳答案

您可以构造一个正则表达式来匹配参数中的所有正则表达式,然后使用 Matcher.find() 跟踪之前与 end() 匹配的结束索引.

注意:在下面的代码中,我显示 Pattern.quote(r) 来处理“++”(这是无效的正则表达式模式)。如果您确实支持正则表达式作为参数,只需删除该调用即可。

    String[] regex = { "int", ";", "++", "=" };
StringBuilder pattern = new StringBuilder();
for (String r : regex) {
pattern.append('|').append(Pattern.quote(r));
}

String input = "int a=10; a++;";
Matcher m = Pattern.compile(pattern.substring(1)).matcher(input);
// e.g. m = Pattern.compile("int|;|\\+\\+|=").matcher(input);
List<String> result = new ArrayList<String>();
for (int i=0 ; m.find() ; i = m.end()) {
if (i != m.start()) {
result.add(input.substring(i, m.start()));
}
result.add(m.group(0));
}
String[] array = result.toArray(new String[result.size()]);

关于Java 字符串分割/操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16202190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com