2013-03-06 3 views
29

Я пытаюсь взять последние три chracters любой строки и сохранить ее как другую переменную String. У меня тяжелое время с моим мыслительным процессом.Получить последние три символа из любой строки - Java

String word = "onetwotwoone" 
int length = word.length(); 
String new_word = id.getChars(length-3, length, buffer, index); 

Я не знаю, как использовать метод getChars, когда дело доходит до буфера или индекса. Eclipse заставляет меня иметь там. Какие-либо предложения?

+0

Буфер является символом 'char []', где будут отображаться символы, а индекс - это начало этого массива, в котором вы хотите запустить копию. Просто создайте char [] размера 3 и установите индекс равным 0. Хотя подстрока, вероятно, была бы лучше –

+0

согласиться с преобразованием метки в char [] (String.toCharArray(), а затем распечатать последние 3) – amitmah

ответ

106

Почему бы не просто String substr = word.substring(word.length() - 3)?

Update

Пожалуйста, убедитесь, что вы убедитесь, что String составляет не менее 3 символов перед вызовом substring():

if (word.length() == 3) { 
    return word; 
} else if (word.length() > 3) { 
    return word.substring(word.length() - 3); 
} else { 
    // whatever is appropriate in this case 
    throw new IllegalArgumentException("word has less than 3 characters!"); 
} 
+0

Могу быть осторожным со строками с менее чем тремя символами, я думаю, что отрицательные входы возвратят исходную строку (может быть, и не так), что может или не может быть приемлемым для того, что они пытаются выполнить. – celestialorb

+1

@celestialorb: отрицательный индекс вызывает исключение, согласно [docs] (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring%28int%29). – MvG

+0

@celestialorb, спасибо за упоминание, так или иначе исходный код из вопроса также должен обрабатывать исключения, поэтому я не думал об этой проблеме. – Egor

1

String newString = originalString.substring(originalString.length()-3);

+0

@MvG: Обновлен ответ. Да, была опечатка – Cratylus

0

Метод getChars строка не возвращает значение , вместо этого он выгружает свой результат в ваш буферный (или целевой) массив. Параметр index описывает начальное смещение в вашем целевом массиве.

Пробуйте link для более подробного описания метода getChars.

Я согласен с другими в этом вопросе, я думаю, что подстрока будет лучшим способом справиться с тем, что вы пытаетесь выполнить.

0

Вы можете использовать подстроку

String word = "onetwotwoone" 
int lenght = word.length 
String numbers = word.substring(word.length() - 3); 
+0

, она должна быть 'word.length()' – Shardul

3
public String getLastThree(String myString) { 
    if(myString.length() > 3) 
     return myString.substring(myString.length()-3); 
    else 
     return myString; 
} 
1

Если вы хотите String, состоящий из трех последних символов, вы можете использовать substring(int):

String new_word = word.substring(word.length() - 3); 

Если вы действительно хотите их как массив символов, вы должны написать

char[] buffer = new char[3]; 
int length = word.length(); 
word.getChars(length - 3, length, buffer, 0); 

Первые два аргумента getChars обозначают часть строки, которую вы хотите извлечь. Третий аргумент - это массив, в который будет помещена эта часть. И последний аргумент дает позицию в буфере, где начинается операция.

Если строка содержит менее трех символов, вы получите исключение в любом из перечисленных случаев, поэтому вы можете проверить это.

12

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

String last3 = str.replaceAll(".*?(.?.?.?)?$", "$1"); 

Этот код возвращает до 3; если их меньше 3, он просто возвращает строку.

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

String last3 = str == null || str.length() < 3 ? 
    str : str.substring(str.length() - 3); 

К «безопасно», я имею в виду, не бросать исключение, если строка аннулирует или короче 3-х символов (все другие ответы не являются «безопасными»).


Приведенный выше код идентичен эффекту для этого кода, если вы предпочитаете более подробный, но потенциально более простой для чтения форме:

String last3; 
if (str == null || str.length() < 3) { 
    last3 = str; 
} else { 
    last3 = str.substring(str.length() - 3); 
} 
+0

Возможно, но ее трудно понять с помощью тернарного оператора и нехватки круглых скобок. Поэтому я бы посоветовал это сделать здесь. -1. – MvG

+1

@MvG, поэтому этот ответ «не помогает»? (Это то, что означает 1-й голос). Почему использование тройного синтаксиса не помогает? И куда бы вы положили скобки? Напротив, я думаю, что этот ответ полезен, особенно учитывая, что все остальные будут взрываться, если они передадут нулевой или короткий ввод. – Bohemian

+0

Не полезно, потому что я верю (извините, если я ошибаюсь), что большинство пользователей, которые борются с извлечением подстроки из заданной строки, будут на их голове, пытаясь прочитать ваш код. Проверка длины - все очень хорошо, но на этом уровне я бы счел полезными более подробные решения, а загадочные решения только запутались. Что касается круглых скобок: я бы написал это '... = ((... || ...)? ...: ...)'. Добавленная строка добавляет вещи намного лучше. – MvG

6

Я считал бы right метод из StringUtils класса от Apache Commons Lang: http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#right(java.lang.String,%20int)

Это безопасно. Вы не получите NullPointerException или StringIndexOutOfBoundsException.

Пример использования:

StringUtils.right("abcdef", 3)

Вы можете найти больше примеров под указанной выше ссылке.

+0

В Android этой функции нет – Pranaysharma

+2

Это должен быть правильный ответ! – hackingforgirls