2015-07-31 2 views
0

Привет, ребята, я хочу, чтобы извлечь только первые буквы из этой строки:Java извлечь только первые буквы/символы из строки

String str = "使 徒 行 傳 16:31 ERV-ZH"; 

Я только хочу, чтобы получить эти символы:

使 徒 行 傳 

и не включают в себя

ERV-ZH 

Только буквы или символы перед цифрами плюс двоеточие.

Обратите внимание, что китайские буквы также могут быть английскими и другими буквами.

это то, что я пробовал:

str.split(" ")[0]; 

Но я только получаю первую букву. У вас есть идея, как достичь моего требования? Любая помощь будет оценена. Благодарю.

Примечание:

Кроме того, строки являются динамическими, так что я только представленным символами образца.

ответ

1

вы можете использовать следующее регулярное выражение ^([\\D\\s]+), это то, что вам нужно:

String str = "使 徒 行 傳 16:31 ERV-ZH"; 
    String pattern = "^([\\D\\s]+)"; 

    Pattern r = Pattern.compile(pattern); 

    Matcher m = r.matcher(str); 
    if (m.find()) { 
    System.out.println("Found value: " + m.group(0)); 
    } else { 
    System.out.println("NO MATCH"); 
    } 
} 

Это live DEMO здесь.

В следующем регулярном выражении ^([\\D\\s]+):

  • ^ будет соответствовать только в begginnig.

  • \\D избежит сопоставления любого числа.

Примечание, что это будет иметь место для любой строки.

+0

он получает ERV-ZH, когда я пытался изменить str = "H E L L O 16:31 ERV-ZH" –

+0

@bEtTyBarnes Нет, это не так! он просто совпадает с H E L L O, вы можете проверить его в DEMO. –

+0

Хорошо проверит его –

3

Это должно дать вам желаемый результат

String str = "使 徒 行 傳 16:31 ERV-ZH"; 

String[] test = str.split("\\d\\d:\\d\\d"); 

for (String s : test) { 
    System.out.println(s); 
} 

Первый элемент будет частью до того времени, и так далее

Edit: если вы нуждаетесь в более динамично в течение времени, как 6:31 или 16:6, то вы могли бы использовать это регулярное выражение "\\d{1,2}:\\d{1,2}"

+0

Это по-прежнему получать ERV -ZH –

+0

@bEtTyBarnes да, потому что он разделен, вы можете просто продолжить элемент 0 в массиве. – SomeJavaGuy

+0

Я добавил в Stringbuilder, как мне удалить ERV-ZH? –

0

Если вы не всегда есть шаблон даты, которая может быть использована в качестве разделителя в середине, и ищут более общее решение, вы могли бы пойти с этим: str.replaceAll("[^\\p{L}\\s]+.*", "")

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