我需要获取一个位于两个相同或不同分隔符之间的子字符串。分隔符将在字符串中多次发生,因此我需要提取位于delimiter1的mth事件和delimiter2的第n次之间的子字符串。例如:
myString : Ron_CR7_MU^RM^_SAF_34^如果我需要提取位于'_‘第三次出现和第三次出现'^’之间的子字符串,我应该在这里做什么?
Substring = SAF_34或者我可以查找一个位于第2 '^‘和第4 '_’之间的子字符串,即:
Substring = _SAFSQL等价于: substr(myString,instr(myString,'',1,3)+1,instr(myString,'^',1,3)-1-instr(myString,'',1,3))
发布于 2014-02-25 14:08:00
我会用,
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);发布于 2014-02-25 13:19:14
如果您可以在没有regex的情况下使用解决方案,则可以在字符串中找到索引,结果字符串需要在哪里开始,需要在哪里结束。然后只需执行:myString.substring(start,end)就可以得到结果。
最大的问题是找到start和end。要做到这一点,您可以重复这个N (M)次:
int pos = indexOf(delimiterX)myString = myString.substring(pos) //您可能想要处理myString的副本希望你有个主意。
发布于 2014-02-25 14:10:59
您可以创建一个小方法,使用(如前所述)String.indexOf(字符串)顺序地在分隔符之间搜索此类子字符串;您确实需要确定是否需要所有子字符串(无论它们是否重叠)。如果你不想看到重叠的字符串。下面是这类代码的试用版
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;
}
}https://stackoverflow.com/questions/22015228
复制相似问题