2014-01-09 3 views
1

У меня есть следующие строки в Java:Как вырезать ключевое слово в String (Java)?

String test = "Goof 23N, 45, 88, GOOF 33*, 12-24"; 

Теперь я хочу, чтобы сократить слово «лох» от строки, и я хочу, чтобы сохранить первоначально ввод 23N в отдельной строке (но как может удаление это ключевое слово и сохранить исходный ввод «23N» или «33 *»)

for(String tmpTest : test.split(",")){ 

    if (tmpTest.toLowerCase.contains("goof")){ 
     String separateString = // implementation unclear 
    } 

} 
+3

Посмотрите на [API документации класса 'String'] (http://docs.oracle.com/javase/7/ docs/api/java/lang/String.html), он содержит много полезных методов, которые вы можете использовать для этого. – Jesper

+0

'String test = Goof 23N, 45, 88, GOOF 33 *, 12-24;' это Java snipplet? – Rugal

+0

'Goof 23N, 45, 88, GOOF 33 *, 12-24;' это неверно Строка, вы имеете в виду 'String test =" Goof 23N, 45, 88, GOOF 33 *, 12-24 ";' вместо? – Piotr0123456

ответ

0

Нечто подобное может вам помочь. Замените оператор if на приведенный ниже.

int index = tmpTest.toLowerCase().indexOf("goof"); 
if (index >= 0) { 
    String value = tmpTest.substring(index + 5); 
} 

Кроме того, будьте осторожны с ошибками компиляции, которые у вас есть в коде.

+1

Это будет работать, только если слово «goof» находится в начале строки. –

+0

Он работает, когда goof находится перед другим значением. Похоже, что это правило. –

+0

Но это может быть так, когда пользователю нужно получить целую строку с удаленным «goof». Ваш код не поддерживает это. –

-1

Время для небольшого псевдокода меня думает.

Шаг 1

Вы хотите разделить String вверх в tokens. Вы можете сделать это, используя String.split().

Let input equal "this, is, just, a, GOOFtest". 
// It's a comma that separates each token, so let's split on that. 
Let tokens equal input.split(","). 

ПРИМЕЧАНИЕ: Если вы хотите сохранить введенные данные в качестве String, то не делайте этого шага.

Шаг 2

Разбираем данных, удаление "GOOF" как вы его видите. Вы можете использовать для этого String.replaceAll().

for every token in tokens 
    let token equal token.replaceAll("GOOF", nothing). 

Примечание: Если GOOF может прийти в разных случаях, это время для некоторых regexp. Это называется metalanguage, и оно предназначено для анализа и управления String с. То, что вы хотите сделать, не учитывает case, и вы можете добиться этого, используя оператор ?i.

String regex = "(?i)GOOF"; 
String parsedInput = input.replaceAll(regex, ""); 
// And that's the only bit of Java you're getting!! 

Шаг 3

????

Шаг 4

прибыль! У вас есть массив, содержащий только значения, без появления GOOF.

+0

Какой язык: = принадлежит? –

+0

* Время для небольшого псевдокода, который я думаю. * – christopher

+0

Псевдокод не должен использовать символы. Просто чистый английский, используя логические объяснения. –

2

Может быть, вы можете попробовать это:

String test = "Goof 23N, 45, 88, GOOF 33*, 12-24"; 
    String value = test.replaceFirst("Goof", ""); 

Выход: 23N, 45, 88, 33 * лох, 12-24

Или, если вам нужно удалить все в версии «лох» без дела соответствия затем проверить это:

String test = "Goof 23N, 45, 88, GOOF 33*, 12-24"; 
    // (?i) in the below regex will ignore case while matching 
    String value = test.replaceAll("(?i)Goof\\s*", ""); 

Выход: 23N, 45, 88, 33 *, 12-24

+0

ok, но Goof может быть написан как «GooF» или «GOOF» или «GoOf» или «gooF» и так далее. Теперь метод replaceAll не работает очень хорошо :-( – Marwief

+0

Второй подход в моем сообщении должен ответить на ваш вопрос. –

0

Вы можете использовать функцию replaceAll(String regex, String replacement)

String test = "Goof 23N, 45, 88, GOOF 33*, 12-24"; 
test = test.replaceAll("Goof","").replaceAll("GOOF",""); 
+0

ok, но Goof может быть написан как «GooF» или «GOOF» или «GoOf» или «gooF», и поэтому на.Теперь метод replaceAll не работает очень хорошо :-( – Marwief

0

Вы хотели бы использовать replaceAll с регулярным выражением игнорируя случае. Вы можете использовать Pattern.quote() для этой цели:

String keyword = "gOOf"; 

String test = "Goof 23N, 45, 88, GOOF 33*, 12-24"; 
String replaceString = "(?i)" + Pattern.quote(keyword); 

test = test.replaceAll(replaceString, ""); 
System.out.println(test); 

Выход:

23N, 45, 88, 33 *, 12-24

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

+0

Но мне нужен этот вывод: 23N, 45, 88, 33 *, 12-24 – Marwief

+0

@Marwief да, поэтому я изменил код здесь - посмотрите отредактированные строки – PopoFibo

+0

Можете ли вы мне помочь? Как я могу реализовать что-то вроде этого с помощью регулярных выражений: if if (test.contains (replaceString)) " – Marwief

0

Просто еще один способ сделать это ...

 String text = "Goof  23N, 45, 88, GoOF 33*, 12-24"; 
     //if you want to remove trailing spaces use 'goof\\s*' as regex 
     String regex="goof"; 
     Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); 
     Matcher m = p.matcher(text);   
     System.out.println(m.replaceAll("")); 
0
final String GOOF = "goof"; 
String input = "Goof 23N, 45, 88, GOOF 33*, 12-24"; 
String inputLawerCase = input.toLowerCase(); 
String inputWithoutGoof = inputLawerCase.replaceFirst(GOOF, ""); 
String output = input.substring(input.length() - inputWithoutGoof.length()); 

//In case Goof is not at the beginning of the string 
int goofIndex = inputLawerCase.indexOf(GOOF); 
output = input.substring(0, goofIndex) + input.substring(goofIndex + GOOF.length()); 
Смежные вопросы