Увеличение последней буквы строки - PullRequest
0 голосов
/ 23 октября 2010

Вот где я хотел бы, чтобы в Java-классе String был метод replaceLast, но его нет, и я получаю неправильные результаты с моим кодом.

Я пишу программу, которая ищет структуру данных длялюбые элементы, которые соответствуют строковому префиксу.Однако, поскольку я использую Iterator, последний элемент, возвращаемый вызовом iter.next (), не соответствует шаблону, поэтому я хочу изменить строку поиска, чтобы последний символ запроса увеличивался на одну букву,Мой тестовый код возвращает [C @ b82368 с этим кодом и An как titleSearch:

public String changeLastCharacter(String titleSearch) {
    char[] temp= titleSearch.toCharArray();

    char lastLetter= temp[temp.length-1];
    lastLetter++;
    temp[temp.length-1]= lastLetter;

    String newTitleSearch= temp.toString();
    return newTitleSearch;
}

Во-первых, какова причина вывода этого кода?Во-вторых, есть ли лучший способ выполнить мое решение?

Ответы [ 3 ]

4 голосов
/ 23 октября 2010

Вы хотите:

newTitleSearch = new String(temp);

Метод toString не переопределяется для массивов;это обычный Object.toString, предназначенный для отладки.Выше фактически создает строку символов.Альтернатива:

int len = titleSearch.length();
String allButLast = titleSearch.substring(0, len - 1);
newTitleSearch = allButLast + new Character(titleSearch.charAt(len - 1) + 1);
2 голосов
/ 23 октября 2010

Всякий раз, когда вы видите неожиданный вывод, такой как ....@<hex-digits>, есть вероятность, что вы случайно используете toString() для некоторого объекта, класс которого наследует реализацию по умолчанию от Object.

Метод toString() по умолчанию возвращает строку, значение которой состоит из имени типа для объекта в сочетании с «хэш-кодом» объекта в виде шестнадцатеричных цифр. В вашем случае часть [C является именем типа для объекта char[]. '[' Означает «массив из», а «C» означает примитивный тип char.

Правила формирования имен типов, используемые в методе toString() по умолчанию, полностью документированы в javadocs для java.lang.Class.getName().

1 голос
/ 23 октября 2010

Ваша проблема temp.toString(). Попробуйте String newTitleSearch = new String(temp); вместо.

Я понял это с помощью System.out.println(temp[0]+","+temp[1]); после того, как temp [1] add был присвоен увеличенному значению. Вы можете сделать это еще проще, используя отладчик вашей IDE.

Поскольку массив был назначен правильно, проблема должна была быть в toString().

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