首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个相同或不同的分隔符之间的子字符串(当分隔符多次发生时)

两个相同或不同的分隔符之间的子字符串(当分隔符多次发生时)
EN

Stack Overflow用户
提问于 2014-02-25 13:09:05
回答 3查看 1.4K关注 0票数 0

我需要获取一个位于两个相同或不同分隔符之间的子字符串。分隔符将在字符串中多次发生,因此我需要提取位于delimiter1的mth事件和delimiter2的第n次之间的子字符串。例如:

代码语言:javascript
复制
myString : Ron_CR7_MU^RM^_SAF_34^

如果我需要提取位于'_‘第三次出现和第三次出现'^’之间的子字符串,我应该在这里做什么?

代码语言:javascript
复制
Substring = SAF_34

或者我可以查找一个位于第2 '^‘和第4 '_’之间的子字符串,即:

代码语言:javascript
复制
Substring = _SAF

SQL等价于: substr(myString,instr(myString,'',1,3)+1,instr(myString,'^',1,3)-1-instr(myString,'',1,3))

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-25 14:08:00

我会用,

代码语言:javascript
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2014-02-25 13:19:14

如果您可以在没有regex的情况下使用解决方案,则可以在字符串中找到索引,结果字符串需要在哪里开始,需要在哪里结束。然后只需执行:myString.substring(start,end)就可以得到结果。

最大的问题是找到startend。要做到这一点,您可以重复这个N (M)次:

  1. int pos = indexOf(delimiterX)
  2. myString = myString.substring(pos) //您可能想要处理myString的副本

希望你有个主意。

票数 1
EN

Stack Overflow用户

发布于 2014-02-25 14:10:59

您可以创建一个小方法,使用(如前所述)String.indexOf(字符串)顺序地在分隔符之间搜索此类子字符串;您确实需要确定是否需要所有子字符串(无论它们是否重叠)。如果你不想看到重叠的字符串。下面是这类代码的试用版

代码语言:javascript
复制
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;
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22015228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档