想要在<in>
String ref = "application<in>rid and test<in>efd";
int result = ref.indexOf("<in>");
int result1 = ref.lastIndexOf("<in>");
String firstWord = ref.substring(0, result);
String[] wor = ref.split("<in>");
for (int i = 0; i < wor.length; i++) {
System.out.println(wor[i]);
}
}
我的预期输出
String[] output ={application,rid,test,efd}
我试过2个选项第一个IndexOf
但是如果字符串有两个以上<in>
我没有得到我预期的输出
第二个split
它也未达到预期的输出
请建议获得该词的最佳选择(<in>
之前和之后)
答案 0 :(得分:4)
您可以使用如下表达式:\b([^ ]+?)<in>([^ ]+?)\b
(示例here)。这应与<in>
标记之前和之后的字符串匹配,并将它们分为两组。
因此,鉴于此:
String ref = "application<in>rid and test<in>efd";
Pattern p = Pattern.compile("\\b([^ ]+?)<in>([^ ]+?)\\b");
Matcher m = p.matcher(ref);
while(m.find())
System.out.println("Prior: " + m.group(1) + " After: " + m.group(2));
收率:
Prior: application After: rid
Prior: test After: efd
或者使用split
:
String[] phrases = ref.split("\\s+");
for(String s : phrases)
if(s.contains("<in>"))
{
String[] split = s.split("<in>");
for(String t : split)
System.out.println(t);
}
收率:
application
rid
test
efd
答案 1 :(得分:2)
正则表达是你的朋友:)
public static void main(String args[]) throws Exception {
String ref = "application<in>rid and test<in>efd";
Pattern p = Pattern.compile("\\w+(?=<in>)|(?<=<in>)\\w+");
Matcher m = p.matcher(ref);
while (m.find()) {
System.out.println(m.group());
}
}
O / P:
application
rid
test
efd
答案 2 :(得分:1)
毫无疑问,使用Pattern/Matcher
API匹配您需要的API对于这个问题更简单。
但是,如果您正在寻找短而快速的 String#split
解决方案,那么您可以考虑:
String ref = "application<in>rid and test<in>efd";
String[] toks = ref.split("<in>|\\s+.*?(?=\\b\\w+<in>)");
<强>输出:强>
application
rid
test
efd
此正则表达式在<in>
上分割,或者与空格匹配的模式,后跟0个字符,后跟单词<in>
。
答案 3 :(得分:0)
您也可以尝试以下代码,这很简单
class StringReplace1
{
public static void main(String args[])
{
String ref = "application<in>rid and test<in>efd";
System.out.println((ref.replaceAll("<in>", " ")).replaceAll(" and "," "));
}
}