Удаление резервного массива из строк - PullRequest
1 голос
/ 14 марта 2011

Я хочу получить первые 4 символа строки для сравнения с другой строкой. Тем не менее, когда я делаю что-то вроде

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

Он берет резервный массив longString и делает невозможным его простое сравнение.

Я также пытался преобразовать longString в массив символов и вставить каждый символ, но я всегда получаю длинную строку. В документах по разработке Android говорится, что для удаления массива резервных копий используется конструктор String, но, похоже, он мне тоже не подходит.

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

Любые предложения будут оценены!

Ответы [ 3 ]

2 голосов
/ 14 марта 2011

Во-первых, это 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.

0 голосов
/ 28 июня 2012

Если вам действительно нужно избавиться от резервного массива, сработает следующее:

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

Это может быть необходимо, например, если вы анализируете строки и создаете подстроки и вам может потребоваться сделать это:

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

Это создает действительно новую строку с нулевым смещением и независимым вспомогательным массивом. В противном случае вы сохраняете тот же самый резервный массив, который в редких случаях может вызвать проблему для кучи, поскольку она никогда не может быть собрана сборщиком мусора.

0 голосов
/ 14 марта 2011

Как бы вы хотели сравнить?Есть встроенный метод для простого сравнения:

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

В качестве альтернативы, поскольку String является CharSequence, что-то вроде:

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

также будет работать.

Наконец, каждая строка создается в резервном массиве, отрицать это невозможно, и longString.subString (0,3) всегда (кроме индекса вне пределов) возвращает строку с 4-элементным символомМассив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...