2016-07-26 7 views
-4

Если предположить, что у меня есть следующая строка:Формат строки в Java

1 - <how_subject> "Please forgive me" 
2 - <who> "Princess Peach" 
3 - <what> "gave me a hickey." 

Как я могу только напечатать, что находится внутри кавычек? (Пожалуйста, простите меня, принцесса Персик, мне понравилась.)

Текст, который я хочу напечатать, «Пожалуйста, простите меня, принцесса Персик, дала мне хик». без кавычек.

+1

Вы имеете в виду печать «how_subject», «who» и «what», т.е. вещи внутри скобок? – ifly6

+0

Я хочу печатать -> Прошу простить меня, принцесса Персик, дала мне хикки. – Copacel

+0

Вы имеете в виду текст внутри кавычек, а не внутри скобок? Просьба уточнить. – user1438038

ответ

2

Вы можете попробовать, как это, если вы хотите, чтобы получить строку внутри скобок <>

String str = "1 - <how_subject> \"Please forgive me\"2 - <who> \"Princess Peach\"3 - <what> \"gave me a hickey.\""; 

Pattern p = Pattern.compile("\\<(.*?)\\>"); 
Matcher m = p.matcher(str); 

while(m.find()) { 
    System.out.println(m.group(1)); 
} 

IDEONE DEMO

И если вы хотите, чтобы получить строку betwen кавычки "" затем просто изменить шаблон регулярного выражения для :

Pattern p = Pattern.compile("\"([^\"]*)\""); 

DEMO

+0

Но это не моя строка ... – Copacel

+0

Это: 1 - «Пожалуйста, прости меня» 2 - «Принцесса Персик» 3 - «дал мне хикки». – Copacel

+0

@CalinCretu: - Вам нужно избегать двойных кавычек внутри вашей строки, и именно поэтому я использовал \ –

1

Вы можете либо применить регулярное выражение или просто использовать indexOf() и lastIndexOf() извлечь цитируемый текст:

List<String> lines = new ArrayList<>(); 
lines.add("1 - <how_subject> \"Please forgive me\""); 
lines.add("2 - <who> \"Princess Peach\""); 
lines.add("3 - <what> \"gave me a hickey.\""); 

List<String> quotedText = new ArrayList<>(); 
for (String line: lines) { 
    quotedText.add(line.substring(line.indexOf('"') + 1, line.lastIndexOf('"'))); 
} 

System.out.print(String.join(" ", quotedText)); 

Или в случае, если ваш вход один Строка:

String input = "1 - <how_subject> \"Please forgive me\"\n2 - <who> \"Princess Peach\"\n3 - <what> \"gave me a hickey.\""; 
String[] lines = input.split("\\n"); 

List<String> quotedText = new ArrayList<>(); 
for (String line: lines) { 
    quotedText.add(line.substring(line.indexOf('"') + 1, line.lastIndexOf('"'))); 
} 

System.out.print(String.join(" ", quotedText)); 

кода выше приводят к этому выводу:

Please forgive me Princess Peach gave me a hickey. 
+0

. Это хорошая идея, но в моем случае у меня есть только одна строка, а не строка списка, это строка который был возвращен из функции. – Copacel

+0

@CalinCretu: Вы должны быть более точными в своем вопросе. Вы не указали какой-либо код, поэтому мы можем только догадываться, как выглядит ваш ввод. Я добавил еще один блок кода в свой ответ с одной строкой, содержащей вход. – user1438038

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