Java 从字符串中删除备份数组

Java 从字符串中删除备份数组,java,android,string,Java,Android,String,我想得到一个字符串的前4个字符,以便与另一个字符串进行比较。然而,当我做一些像 String shortString; shortString = longString.subString(0,3); 它需要longString的支持数组,因此无法轻松进行比较 我也尝试过将longString转换为字符数组并插入每个字符,但我似乎总是以长字符串结束。Android开发文档说使用字符串构造函数删除支持数组,但它似乎对我也不起作用 String shortString = new String(l

我想得到一个字符串的前4个字符,以便与另一个字符串进行比较。然而,当我做一些像

String shortString;
shortString = longString.subString(0,3);
它需要longString的支持数组,因此无法轻松进行比较

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

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

如有任何建议,将不胜感激

首先,它是
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

您希望如何比较?有一种内置的简单比较方法:

longString.subString(0, 3).compareTo(anotherString); 
或者,由于字符串是字符序列,类似于:

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

for(int i=0;i在您实际需要摆脱支持数组的情况下,以下操作将起作用:

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

例如,如果您正在分析字符串并创建子字符串,则可能需要执行以下操作:

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


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

实际上
substring()
返回一个具有相同支持数组的新字符串。很抱歉输入错误。我使用==进行比较,但是.equals()似乎可以正常工作。我应该马上想到这一点。谢谢您的帮助!