2013-06-16 2 views
1

Я пытаюсь заменить «.» На «\ n \ n» внутри строки, но она не работает, я использую следующий код:заменить «.» На « n n» в строке в Android

   text=text.replace(". ","\n\n"); 

Результатом является каждое слово без последней буквы слова в каждой строке. Я читал что-то вроде точки, означает любой символ в этом случае, но как я могу на самом деле ссылаться на эту точку?

Input Пример: "Привет мир" Пример вывода: ад мир

Спасибо

+1

Попробуйте ЭСКАТО e a. символ \. Я думаю. – Lingviston

+0

«каждое слово без последней буквы слова в каждой строке» <- non capisco niente ... Можете ли вы привести пример? – fge

+0

@Lingviston trap ... '.replace()' не использует регулярные выражения, несмотря на свои «братья и сестры» '.replaceFirst()' и '.replaceAll()', которые делают – fge

ответ

1

Существует что-то нечисто здесь; либо text не является String, либо вы не используете .replace(), а что-то еще (.replaceAll()?), или Android .replace() является ошибкой.

И, честно говоря, я сомневаюсь, что Android-разработчики имели бы такой промах.

The Javadoc for String#replace() говорит:

Заменяет каждую подстроку этой строки, которая соответствует буквальным целевой последовательности с указанной буквального последовательности замены. [курсив мой]

В отличие от своих двойников методов (.replaceFirst() и .replaceAll()), которые действительно используют регулярные выражения, .replace() нет (и тот факт, что внутренне он действительно использует Pattern, по крайней мере, в JDK Oracle, [*], является не проблема).

Поэтому, если вы действительно используете .replace() и получите результат, о котором говорите, это ошибка в Android. Если это так, попробуйте альтернативу, например, так (непроверенные):

public static String realStringReplace(final String victim, final String target, 
    final String replacement) 
{ 

    final int skip = target.length(); 
    final StringBuilder sb = new StringBuilder(victim.length()); 

    String tmp = victim; 
    int index; 

    while (!tmp.isEmpty()) { 
     index = tmp.indexOf(target); 
     if (index == -1) 
      break; 
     sb.append(tmp.subString(0, index)).append(replacement); 
     tmp = tmp.subString(index + skip); 
    } 

    return sb.append(tmp).toString(); 
} 
+0

Существует вероятность ZERO ошибки, которую майор все еще существует в базе кода Android. Фактически, почти ZERO вероятность, что она когда-либо существовала в первую очередь. –

+0

@ StephenC Я согласен; и что? – fge

+0

Это ошибка в вопросе. Либо он дал нам неправильный код, либо не ведет себя так, как он думает/утверждает, что делает. Скорее всего, первый. –

0

точка означает любой символ, если вы используете

text=text.replaceAll(". ", "\n\n"); 

, возможно, вы выложили неверный код, в этом случае попробуйте это одна:

text=text.replaceAll("\\. ", "\n\n"); 

странное дело в том, что эта строка эквивалентна строке, что вы публикуемую ..

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