2014-01-29 3 views
0

Так этот код работает, как ожидалось:ява проблемы с .replaceAll и новой строки

String test = "ONE: this is a\ntest string."; 
System.out.println(test); 
test = test.replaceAll("\n", " "); 
System.out.println(test); 

выход:

ONE: this is a 
test string. 
ONE: this is a test string. 

Но я читаю в электронном письме с JavaMail и по какой-то причине, когда я смотрю на сообщение содержит в себе кучу новых строк. Но по какой-то причине replaceAll ("\ n", "") не работает для меня. Интересно, является ли это проблемой кодирования или чем-то еще. Есть ли другой способ иметь новую строку? Когда я смотрю на электронную почту под gmail, у нее нет новой строки, но когда я распечатываю ее или пытаюсь экспортировать сообщение, любая строка с более чем 70 символами делится на границе слова. Есть идеи?

Properties props = System.getProperties(); 
props.setProperty("mail.store.protocol", "imaps"); 
Session session = Session.getDefaultInstance(props, null); 
Store store = session.getStore("imaps"); 
store.connect("imap.gmail.com", "[email protected]", "password"); 

Folder inbox = store.getFolder("Inbox"); 
inbox.open(Folder.READ_WRITE); 
FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false); 
Message messages[] = inbox.search(ft); 
for(Message msg:messages) { 
    String message = mailman.getContent(msg); 
    System.out.println("ONE:"+ message); 
    message = message.replaceAll("\n",""); 
    System.out.println("TWO: "+message); 
} 

выход:

ONE: We just wanted to remind you about the start of our Underclassmen Academy. 
This program is intended for all freshmen and sophomores who are in the 
initial stages of your career preparation. Juniors are also invited to attend 
if you'd like to gain more exposure and/or are still recruiting. 

TWO: We just wanted to remind you about the start of our Underclassmen Academy. 
This program is intended for all freshmen and sophomores who are in the 
initial stages of your career preparation. Juniors are also invited to attend 
if you'd like to gain more exposure and/or are still recruiting. 
+3

Возможно, строки не разделены только '\ n'. Может быть, это '\ r \ n'? Не могли бы вы попробовать с 'replaceAll (" \ r? \ N "," ")'? – Pshemo

+0

Вы, сэр, блестящие. Отправьте это как ответ, и я приму его, когда SO позволит мне. –

+1

Я был убежден, что вам действительно нужны две слэши, такие как 'replaceAll (" \\ n? \\ r "," ");', но похоже, что решение Pshemo работает. Если это не сработает, попробуйте два слэша. – Rainbolt

ответ

3

Кажется, что линии не разделены \n, но с \r\n. Рассмотрите возможность использования

replaceAll("\r\n"," ") 

или

replaceAll("\r?\n|\r"," ") 

принять также \r\n\n\r.

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