2016-08-08 3 views
0

У меня есть следующая строкаJava раскол и заменить

String path = "(tags:homepage).(tags:project mindshare).(tags:5.5.x).(tags:project 5.x)"; 

Я использовал следующий код,

String delims = "\\."; 

String[] tokens = path.split(delims); 
int tokenCount = tokens.length; 
for (int j = 0; j < tokenCount; j++) { 
    System.out.println("Split Output: "+ tokens[j]); 
} 

Текущий выход

Split Output: (tags:homepage) 
Split Output: (tags:project mindshare) 
Split Output: (tags:5 
Split Output: 5 
Split Output: x) 
Split Output: (tags:project 5 
Split Output: x) 

End цель состоит в том, чтобы преобразовать эту строку в

String newpath = "(tags:homepage)(tags:project mindshare)(tags:5.5.x)(tags:project 5.x)"; 
+2

Почему бы не использовать 'replaceAll ("). (",") ("'? –

+1

Затем используйте «System.out.print», а не «println», если вы не хотите использовать символы новой строки. – AlBlue

+0

@MuratK. - Это не так просто. Ему нужно будет заменить только те '.', которым предшествует' (' – TheLostMind

ответ

3

Вы можете использовать положительный 'назад для достижения этой цели:

String path = "(tags:homepage).(tags:project mindshare).(tags:5.5.x).(tags:project 5.x)"; 
String newPath = path.replaceAll("(?<=\\))\\.", ""); // look for periods preceeded by `)` 
System.out.println(newPath); 

O/P:

(tags:homepage)(tags:project mindshare)(tags:5.5.x)(tags:project 5.x) 
+0

Любой другой лучший способ сделать это, а затем заменитьAll? – srinisunka

+0

@srinisunka - Да, есть, разделить и добавить например .. Или даже indexOf + subString и т. Д. В цикле. такой элегантный, как 'replaceAll' – TheLostMind

+0

Мне нужно сделать некоторую кодировку для newPath, а затем снова объединить их с Dot ... – srinisunka

0

Вот простой подход.

System.out.println("(tags:homepage).(tags:project mindshare).(tags:5.5.x).(tags:project 5.x)".replaceAll("\\)\\.\\(", ")(")); 

выход

(tags:homepage)(tags:project mindshare)(tags:5.5.x)(tags:project 5.x)

0

Если вы хотите удалить "" betwen ") (" use String method replace ("). (", ") ('). Извините, пожалуйста, с мобильного

3

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

Что вы хотите сделать, это сохранить все, что находится в круглых скобках, чтобы мы могли просто перебрать символы и сохранить количество открытых круглых скобок . Если это число больше 0, мы добавим характер (это означает, что мы находимся внутри скобок), если нет, то мы не учитываем характер

String path = "(tags:homepage).(tags:project mindshare).(tags:5.5.x).(tags:project 5.x)"; 

StringBuilder sb = new StringBuilder(); 
int openParens = 0; 
for (char c : path.toCharArray()) { 
    if (c == '(') openParens++; 
    if (openParens > 0) sb.append(c); 
    if (c == ')') openParens--; 
} 

System.out.println(sb.toString()); 

Это имеет то преимущество, что у. ou не подразумевает полагаться на: наличие одной точки между parens, отсутствие вложенных парсеров и т. д.

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