从Android的字符串中提取子字符串的最佳方法是什么?
Answers:
如果您知道开始和结束索引,则可以使用
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);
这是一个真实的例子:
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
您可以使用此代码
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
是一个超级lastString
字符串,例如“ I_AmANDROID.Devloper”,是一个类似“”的字符串。” 并且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)
方法。我可以解释为什么。如果你看一看在String.substring(int, int)
从法android.jar
(最新API 22),您将看到:
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(...)
在内部使用本机数组复制。
而已 :)
最好的祝福!