2016-09-25 3 views
1

Я новичок в программировании и работе над назначением строки Java. Вопрос говорит:Как печатать средние три символа строки в Java?

  1. Объявите переменную строкового типа по имени middle3 (поместить объявление с другими объявлениями вблизи верхней части программы) и использовать оператор присваивания и метод thesubstring назначить middle3 подстроку, состоящую из середины три символа фразы (символ в среднем индексе вместе с символом слева от него и справа). Добавьте заявление println, чтобы распечатать результат. Сохраните, скомпилируйте и запустите, чтобы проверить, что вы сделали до сих пор.

Вот что я сделал:

String phrase = new String ("This is a String test."); 
String middle3 = new String ("tri"); //I want to print the middle 3 characters in "phrase" which I think is "tri". 

middle3 = phrase.substring (9, 11); // this only prints out 1 letter instead of 3 


System.out.println ("middle3: " + middle3); 

Вот мой результат:

Original phrase: This is a String test. 
Length of the phrase: 18 characters 
middle3: S 

Я также думаю, что есть 18 символов в строке «фразы», ​​но если есть нет, сообщите пожалуйста. Заранее благодарю за вашу помощь!

+2

не прописывать код среднего индекса. Подумайте, как вы вычислили это для любой строки. Попробуйте найти средний индекс, тогда средний индекс + -1 будет вашей средней строкой, если длина меньше трех. Также подумайте о том, что бы вы сделали, если длина строки нечетна, а когда она ровная. –

ответ

3

Прежде всего, в phrase есть 22 символа.

"This is a String test." 
^^^^^^^^^^^^^^^^^^^^^^ --> 22 

Обратите внимание, что пространства () учитываются в подсчете символов. Кроме того, String имеет способ length(), который предоставит вам этот номер.

String phrase = "This is a String test."; 
int phraseLength = phrase.length(); //22 

Оттуда, мы можем получить средние три символа по отработке значения phraseLength/2. Средние три символа запустили бы один из них до среднего положения и затем остановились. Однако, поскольку string(int, int) method принимает конечный индекс exclusive, мы должны увеличить его на единицу.

String phrase = "This is a String test."; 
int phraseLength = phrase.length(); //22 
String middle3 = phrase.substring(phraseLength/2 - 1, phraseLength/2 + 2); // will have the middle 3 chars. 

Если длина phrase нечетно, то это будет вернуть его средний 3 символы. Если длина phrase ровная (как она есть здесь), это вернет левый-средний 3 символа. (Например, в 1,2,3,4, я использую left-middle для представления 2 и right-middle для представления 3).

Другое примечание, это и ненужная и плохая практика, чтобы написать new String("asdf"). Вместо этого просто используйте строковый литерал.

String phrase = new String ("This is a String test."); //Bad 
String phrase = "This is a String test."; //Good 
5

Подумайте о том, как получить средние 3-х символы без жесткого кодирования границы методы substring(). Вы можете использовать метод length() в этом отношении. Например, средний символ строки нечетной длины всегда будет иметь индекс str.length()/2, тогда как два средних символа строки четной длины всегда будут иметь индекс str.length()/2 и (str.length()/2) - 1. Таким образом, определение трех средних персонажей будет зависеть от вас. Но для нас мы просто сделаем 3 средних символа с индексами (str.length()/2)-1, str.length()/2 и (str.length()/2)+1.С этой информацией вы можете изменить эту строку кода вы были раньше,

middle3 = phrase.substring (9, 11); 

в

middle3 = phrase.substring (phrase.length()/2 - 1, phrase.length()/2 + 2); 

Как почему оригинальная строка кода вы были до того возвращал только одно письмо, он должен делать с параметрами метода substring. Первый параметр включен, но второй параметр отсутствует. Таким образом, вы только получение символов с 9 до 10.

This is a String test. 
     ^^^ 
     9,10,11 (11 is not included) 

Три символа я указал на это в индексах 9, 10 и 11 соответственно. Вы только извлекли символы '' и 'S', которые вместе представляют собой только «S». Это объясняет однобуквенный вывод раньше.

+0

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

+0

@Paraknight Добро пожаловать! Есть ли причина, по которой вы не приняли ответ? Если бы я мог одобрить, я бы с радостью помог. –

+0

Видимо, я могу принять только один ответ, и я был смущен тем, как работает метод длины, но сообщение Мшника помогло мне это понять. Я бы тоже принял ваш ответ, если мог. Поскольку я не изучал метод Length, я не уверен, что он отличается от метода подстроки. –

2

у Вас есть ошибка в индексе begind и конечный индекс в строке, это правильный код:

String phrase = new String("This is a String test."); 
String middle3 = phrase.substring(11, 14); 
System.out.println("middle3: " + middle3); 
+0

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