我需要获取位于两个相同或不同分隔符之间的子字符串。分隔符将在字符串中多次出现,因此我需要提取位于第n次出现的delimiter1和第n次出现的delimiter2之间的子字符串。 例如:
myString : Ron_CR7_MU^RM^_SAF_34^
如果我需要提取位于第三次出现'_'和第三出现'^'之间的子串,我该怎么办?
Substring = SAF_34
或者我可以寻找位于第二个'^'和第四个'_'之间的子串,即:
Substring = _SAF
SQL等价物将是: substr(myString,instr(myString,'',1,3)+ 1,instr(myString,'^',1,3)-1-instr(myString,'',1,3 ))
答案 0 :(得分:1)
如果您可以使用没有正则表达式的解决方案,您可以在字符串中找到索引所需的索引以及需要结束的索引。然后只需执行:myString.substring(start,end)
即可获得结果。
最大的问题是找到start
和end
。要做到这一点,你可以重复N(M)次:
int pos = indexOf(delimiterX)
myString = myString.substring(pos)
//您可能希望处理myString
希望你有个主意。
答案 1 :(得分:1)
我会用,
public static int findNth(String text, String toFind, int count) {
int pos = -1;
do {
pos = text.indexOf(toFind, pos+1);
} while(--count > 0 && pos >= 0);
return pos;
}
int from = findNth(text, "_", 3);
int to = findNth(text, "^", 3);
String found = text.substring(from+1, to);
答案 2 :(得分:0)
你可以使用(如上所述)String.indexOf(string);创建一个简单地按顺序搜索分隔符之间的子串的方法。您需要确定是否需要所有子字符串(无论它们是否重叠......您的问题表明哪个),或者您是否希望看到重叠的字符串。以下是此类代码的试用
import java.util.Vector;
public class FindDelimitedStrings {
public static void main(String[] args) {
String[] test = getDelimitedStrings("Ron_CR7_MU'RM'_SAF_34'", "_", "'");
if (test != null) {
for (int i = 0; i < test.length; i++) {
System.out.println(" " + (i + 1) + ". |" + test[i] + "|");
}
}
}
public static String[] getDelimitedStrings(String source,
String leftDelimiter, String rightDelimiter) {
String[] answer = null;
;
Vector<String> results = new Vector<String>();
if (source == null || leftDelimiter == null || rightDelimiter == null) {
return null;
}
int loc = 0;
int begin = source.indexOf(leftDelimiter, loc);
int end;
while (begin > -1) {
end = source
.indexOf(rightDelimiter, begin + leftDelimiter.length());
if (end > -1) {
results.add(source.substring(begin, end));
// loc = end + rightDelimiter.length(); if strings must be
// returned as pairs
loc = begin + 1;
if (loc < source.length()) {
begin = source.indexOf(leftDelimiter, loc);
} else {
begin = -1;
}
} else {
begin = -1;
}
}
if (results.size() > 0) {
answer = new String[results.size()];
results.toArray(answer);
}
return answer;
}
}