2010-10-23 4 views
0

Вот где я хочу, чтобы класс String Java имел метод 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; 
} 

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

+0

Вы хотите, чтобы вы сделали последнее письмо в строке следующей буквой в алфавитном порядке? т. е. 'aa' становится' ab'? –

+0

То, что я искал. Я перепутал метод toString с созданием новой String, так как я думал, что класс Char имеет метод toString, который возвращает строку всего массива. – Jason

ответ

4

Вы хотите:

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); 
+0

Я понял, что это что-то вроде этого. Я следовал примеру и перепутал последнюю строку кода. Время для меня назвать это днем. – Jason

+0

Nit-pick: * «Метод символьного массива toString похож на значение по умолчанию ...» *. Фактически, это >> является << значением по умолчанию; то есть 'Object.toString()'. –

+0

@ Stephen, спасибо, я забыл спецификатор массива («[C») был просто именем класса. –

1

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

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

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

2

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

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

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

+0

Спасибо за разъяснение.Я не использую toString так много, поэтому не был знаком с неожиданным выходом. Вы действительно каждый день узнаете что-то новое. – Jason

Смежные вопросы