繁体   English   中英

从字符串中提取子字符串

[英]Extract substring from a string

从android中的字符串中提取子字符串的最佳方法是什么?

如果您知道开始和结束索引,则可以使用

String substr=mysourcestring.substring(startIndex,endIndex);

如果您想从特定索引获取子字符串直到结束,您可以使用:

String substr=mysourcestring.substring(startIndex);

如果您想从特定字符获取子字符串直到结束,您可以使用:

String substr=mysourcestring.substring(mysourcestring.indexOf("characterValue"));

如果要从特定字符之后获取子字符串,请将该数字添加到.indexOf(char)

String substr=mysourcestring.substring(mysourcestring.indexOf("characterValue") + 1);

substring()

str.substring(startIndex, endIndex); 

这是一个真实世界的例子:

String hallostring = "hallo";
String asubstring = hallostring.substring(0, 1); 

在示例中,子字符串将返回:h

还有另一种方法,如果你想得到一个字符前后的子串

String s ="123dance456";
String[] split = s.split("dance");
String firstSubString = split[0];
String secondSubString = split[1];

检查此帖子- 如何在字符串中查找前后子字符串

substring(int startIndex, int endIndex)

如果不指定endIndex ,该方法将返回startIndex 中的所有字符。

startIndex : 起始索引包含在内

endIndex : 结束索引是独占的

例子:

String str = "abcdefgh"

str.substring(0, 4) => abcd

str.substring(4, 6) => ef

str.substring(6) => gh

使用来自android的文本不为人知的类:
TextUtils.substring (charsequence source, int start, int end)

您可以使用 subSequence ,它与 C 中的 substr 相同

 Str.subSequence(int Start , int End)

你可以使用这个代码

    public static String getSubString(String mainString, String lastString, String startString) {
    String endString = "";
    int endIndex = mainString.indexOf(lastString);
    int startIndex = mainString.indexOf(startString);
    Log.d("message", "" + mainString.substring(startIndex, endIndex));
    endString = mainString.substring(startIndex, endIndex);
    return endString;
}

在这个mainString是一个 Super string.like "I_AmANDROID.Devloper" 和lastString是一个像 "." 的字符串。 startString 就像“_”。 所以这个function返回“AmANDROID”。 享受你的代码时间。:)

当发现匹配模式的子字符串多次出现时

    String input_string = "foo/adsfasdf/adf/bar/erqwer/";
    String regex = "(foo/|bar/)"; // Matches 'foo/' and 'bar/'

    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(input_string);

    while(matcher.find()) {
      String str_matched = input_string.substring(matcher.start(), matcher.end());
        // Do something with a match found
    }

在 Android 中获取子字符串的最佳方法是使用(如@user2503849 所说) TextUtlis.substring(CharSequence, int, int)方法。 我可以解释为什么。 如果您查看android.jar (最新 API 22)中的String.substring(int, int)方法,您将看到:

public String substring(int start) {
    if (start == 0) {
        return this;
    }
    if (start >= 0 && start <= count) {
        return new String(offset + start, count - start, value);
    }
    throw indexAndLength(start);
}

好的,比...你觉得私有构造函数String(int, int, char[])是什么样子的?

String(int offset, int charCount, char[] chars) {
    this.value = chars;
    this.offset = offset;
    this.count = charCount;
}

正如我们所看到的,它保持对“旧”值char[]数组的引用。 所以,GC 不能释放它。

在最新的 Java 中,它已修复:

String(int offset, int charCount, char[] chars) {
    this.value = Arrays.copyOfRange(chars, offset, offset + charCount);
    this.offset = offset;
    this.count = charCount;
}

Arrays.copyOfRange(...)在内部使用本地数组复制。

就是这样 :)

此致!

所有的响应者都给出了很好的答案。 但是,我为您提供了所有相关的方法,以便任何人都可以从一个地方获得,如果我发现新的东西,我会编辑我的答案。

1)substring(0)-用于从给定的特定字符中剪切字符串。

2)Substring(0,2)- 从开始(0)和结束(2)字符给你子字符串。

3)Split(“NAME”)-首先将字符串分为两部分返回,这是您在拆分“NAME”中使用的,另一部分是字符串组合的其余部分。

4)subSequence(0,3) - 返回给定开始(0)和结束索引(3)的序列。

*这个不是专门用于分割字符串,但尽管它可能完全用于某些字符串

5)startswith("A",3)- 返回特定起始字符的字符串。

例如,

String s = "StackOverflow";
String[] split = s.split("Stack");
            System.out.println("STRING NAME:"+s.substring(2));
            System.out.println("STRING NAME:"+s.substring(2,3));
            System.out.println("STRING NAME:"+split[1]);
            System.out.println("STRING NAME:"+split[0]);
            System.out.println("STRING NAME:"+s.subSequence(2,5));

输出:1)ackOverflow

2)一个

3)溢出

4)堆栈

5)确认

我希望这会给你足够的信息,你需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM