2015-02-16 3 views
0

Я новичок в программировании (беру класс), и я не уверен, как выполнить эту задачу.Java-новичок: вырезать строку?

«Игнорируя случай, найдите последнее вхождение« a »во вход и удалите все символы, следующие за ним. В случае, если в слове нет« a », удалите все, кроме первых двух символов (напоминание: не используйте инструкции if или циклы). В конце усеченного слова добавьте число, которое представляет собой процент, который длина усеченного слова имеет длину исходного слова, этот процент должен быть округлен до ближайшего целочисленного значения. "

Я буду в порядке с процентной частью, но я не уверен, как сделать первую часть.

  1. Как удалить только после последнего появления «a»?

  2. Если нет «а», как отключить его после первых двух букв без использования оператора if?

Я предполагаю, что ИТС быть сделано с помощью манипуляций со строками и различные подстроки, но я не знаю, как критерии подстрок должны быть сделаны.

Помните, что Java-новичок! Я еще не знаю много причудливых методов кодирования.

Спасибо!

+2

'Строка # indexOf',' Строка # subString' и, вероятно, 'Math.min', а также ... – MadProgrammer

+0

Может быть первая буква в слове? – hhanesand

+0

Это не говорит, что этого не может быть, поэтому, если бы это слово было Apple, я полагаю, было бы правильно разрезать его после первой буквы. – Jonathan

ответ

1

Для нахождения последнего совпадения «а» или «A» вы можете использовать. ..

int index = Math.max(str.lastIndexOf('a'),str.lastIndexOf('A')); 
index = (index==-1)?Math.min(2,str.length()):index+1; 

после того, как вы получите индекс вы можете использовать следующие удалить символы после этого ...

str.substring(0,index); 
+0

Это не удастся, если a является первым символом в строке, но по-прежнему является хорошим решением, и это, вероятно, тот, который ищет ваш учитель. – hhanesand

+0

Я пробовал этот метод, и когда я ввел слово «свитер», выход был просто «ter», а не остальным перед «ter». Должна быть str.substring (0, index + 1); ? – Jonathan

+0

Также есть идеи о том, как сделать второй вариант (верните только первые две буквы, если нет «a»? – Jonathan

3
  • String#toLowerCase - удалить весь корпус из String
  • String#lastIndexOf расскажет вам, где последнее вхождение указанного String происходит, вернется -1, если нет возникновения, это важно.
  • String#subString позволит создать новый String на основе субэлемента текущего String
  • Math#max, Math#min
2

Учитывая String input, рассмотрим следующее в качестве возможной отправной точки:

int indexOfSmallA = input.lastIndexOf('a'); 
    int indexOfBigA = input.lastIndexOf('A'); 
    int beginIndex = Math.max(indexOfSmallA, indexOfBigA); 
    // if not found, begin at 2 or end of input, else begin after last 'a' 
    beginIndex = (beginIndex == -1) ? Math.min(2, input.length()) : beginIndex + 1; 
    String result = input.substring(beginIndex); 
+0

* «напоминание: не использовать, если утверждения или циклы» * – MadProgrammer

+0

@MadProgrammer Теперь вместо этого используйте тернарный оператор. Подтвердил ваш ответ. – gknicker

+0

Я бы по-прежнему считал, что «если-еще», хотя и короткая версия, но мне – MadProgrammer

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