从字符串中删除支持数组

时间:2011-03-13 23:54:16

标签: java android string

我想获取字符串的前4个字符以与另一个字符串进行比较。但是,当我做

之类的事情时
String shortString;
shortString = longString.subString(0,3);

它采用了longString的后备阵列,因此无法轻松比较。

我也尝试将longString转换为字符数组并插入每个字符,但我似乎总是以长字符串结尾。 Android开发文档说使用String构造函数来删除支持数组,但它似乎也不适用于我。

String shortString = new String(longString.subString(0,3));

任何建议都将不胜感激!

3 个答案:

答案 0 :(得分:2)

首先,它是string.substring()而不是.subString()

其次,你的意思是“不可能轻易比较”?您可以轻松地将字符串与.equals()进行比较。

public static void main(String[] args) {
    String longString = "abcdefghijklmn";
    String shortString = longString.substring(0, 3);
    System.out.println(shortString.equals(longString));
}

此代码按原样打印false

<强>更新

如果您调用.substring()以使其生成与原始字符串长度相同的字符串(例如"abc".substring(0,2)),则它将返回对相同字符串的引用。因此,在这种情况下,.equals()将返回true

答案 1 :(得分:0)

你想如何比较?有简单比较的内置方法:

longString.subString(0, 3).compareTo(anotherString); 

或者,因为String是CharSequence,所以类似于:

for (int i=0; i<4; i++){
    if (anotherString.charAt(i) != shortString.charAt(i)) return false;
}

也可以。

最后,每个String都在后备数组中构建,没有办法拒绝它,而longString.subString(0,3)总是(除了索引超出范围)返回一个带有4个元素的Char数组的String。

答案 2 :(得分:0)

如果您确实需要摆脱支持数组,以下内容将起作用:

String newString = StringBuilder(oldString).toString();

这可能是必要的,例如,如果要解析字符串并创建子字符串,则可能需要执行此操作:

String newString = StringBuilder(oldString.substring(start,end).toString();

这将创建一个真正的新字符串,其中包含零偏移和独立后备阵列。否则,您将维护相同的后备阵列,在极少数情况下可能会导致堆出现问题,因为它永远不会被垃圾回收。