2016-07-08 1 views
1

Я моя строка определяется какКак отображать символы до определенного индекса строки, используя функцию String?

text1: Текст2 Text3: text4: text5

Я хочу, чтобы получить выход как

text1: text2: text3

с использованием методов String.

Я попытался использовать lastIndexOf, затем substring, а затем снова lastIndexOf. Я хочу избежать этих трех шагов с вызовом lastIndexOf два раза.
Есть ли лучший способ достичь этого?

+2

ли вы быть в состоянии объяснить ваши вопрос дальше? Неясно, в чем проблема, которую вы пытаетесь решить, потому что приведенный вами пример является слишком абстрактным и не достаточно конкретным, чтобы люди могли дать хороший ответ. – Relequestual

ответ

1

Регулярное выражение может быть использовано для определения правильной части строки:

private static Pattern PATTERN = Pattern.compile("([^:]*:){2}[^:]*(?=:|$)"); 

public static String find(String input) { 
    Matcher m = PATTERN.matcher(input); 
    return m.find() ? m.group() : null; 
} 

Альтернативно не используйте substring между каждым вызовом lastIndexOf, но использование версия lastIndexOf, которая ограничивает диапазон индексов:

public static String find(String input, int colonCount) { 
    int lastIndex = input.length(); 
    while (colonCount > 0) { 
     lastIndex = input.lastIndexOf(':', lastIndex-1); 
     colonCount--; 
    } 
    return lastIndex >= 0 ? input.substring(0, lastIndex) : null; 
} 

Обратите внимание, что здесь colonCount - это номер :, которые вышли из строки.

2

Вы можете сделать это, запустив цикл для итерации по символам строки из индекса = 0 в индекс = lastIndexOf('3'). Вот код:

String s = "text1:text2:text3:text4:text5"; 
for(int i = 0; i < = s.lastIndexOf('3'); i++) 
    System.out.print(s.charAt(i)); 

Это дает вам требуемый результат.

ВЫВОД:

text1:text2:text3 
1

Вы можете использовать Java split() -метод:

String string = "text1:text2:text3:text4:text5"; 
String[] text = string.split(":"); 
String text1 = text[0]; 
String text2 = text[1]; 
String text3 = text[2]; 

А затем генерировать выходной сигнал непосредственно или для цикла:

// directly 
System.out.println(text1 + ":" + text2 + ":" + text3); 

// for-loop. Just enter, how many elements you want to display. 
for(int i = 0; i < 3; i++){ 
    System.out.println(text[i] + " "); 
} 

Выход:

text1 text2 text3 

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

Пример:

Рассмотрим Master Yoda.

У него странный способ говорить и часто смешивает структуру предложения. Когда он вводит себя, он говорит (неверный!) Сенат: «Мастер Йода, мое имя».

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

Берет в поле ввода-строке и «разрыв» это в его части:

String string = "Master:Yoda:my:name:is" 
String[] text = string.split(":"); 
String jediTitle = text[0]; 
String lastName = text[1]; 
String posessivePronoun = text[2]; 
String noun = text[3]; 
String linkingVerb = text[4]; 

Массива «текст» теперь содержит предложение в порядке, что вы положили его.Теперь ваш переводчик может анализировать структуру и исправить ее:

String correctSentenceStructure = posessivePronoun + " " + noun + " " + linkingVerb + " " + jediTitle + " " + lastName;  
System.out.println(correctSentenceStructure); 

Выход:

"My name is Master Yoda" 

Рабочий переводчик может быть еще одним шагом на пути к части в галактике.

1

Вы можете попробовать:

String test = "text1:text2:text3:text4:text5"; 
String splitted = text.split(":") 
String result = ""; 
for (int i = 0; i <3; i++) { 
    result += splitted[i] + ":" 
} 
result = result.substring(0, result.length() -1) 
0

Maby попробовать эту Одностроковые s.substring(0, s.lastIndexOf('3')+1);

Полный пример:

package testing.project; 

public class Main { 

    public static void main(String[] args) { 
     String s = "text1:text2:text3:text4:text5"; 
     System.out.println(s.substring(0, s.lastIndexOf('3')+1)); 
    } 
} 

Выход:

text1: text2: text3

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