可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
How can I replace all line breaks from a string in Java in such a way that will work on Windows and Linux (ie no OS specific problems of carriage return/line feed/new line etc.)?
I\'ve tried (note readFileAsString is a function that reads a text file into a String):
String text = readFileAsString(\"textfile.txt\");
text.replace(\"\\n\", \"\");
but this doesn\'t seem to work.
How can this be done?
回答1:
You need to set text
to the results of text.replace()
:
String text = readFileAsString(\"textfile.txt\");
text = text.replace(\"\\n\", \"\").replace(\"\\r\", \"\");
This is necessary because Strings are immutable -- calling replace
doesn\'t change the original String, it returns a new one that\'s been changed. If you don\'t assign the result to text
, then that new String is lost and garbage collected.
As for getting the newline String for any environment -- that is available by calling System.getProperty(\"line.separator\")
.
回答2:
As noted in other answers, your code is not working primarily because String.replace(...)
does not change the target String. (It can\'t - Java strings are immutable!) What it actually does is creates a new String with the characters changed as required. But your code then throws away that String ...
Here are some possible solutions. Which one is most correct depends on what exactly you are trying to do.
// #1
text = text.replace(\"\\n\", \"\");
Simply removes all the newline characters. This does not cope with Windows or Mac line terminations.
// #2
text = text.replace(System.getProperty(\"line.separator\"), \"\");
Removes all line terminators for the current platform. This does not cope with the case where you are trying to process (for example) a UNIX file on Windows, or vice versa.
// #3
text = text.replaceAll(\"\\\\r|\\\\n\", \"\");
Removes all Windows, UNIX or Mac line terminators. However, if the input file is text, this will concatenate words; e.g.
Goodbye cruel
world.
becomes
Goodbye cruelworld.
So you might actually want to do this:
// #4
text = text.replaceAll(\"\\\\r\\\\n|\\\\r|\\\\n\", \" \");
which replaces each line terminator with a space.
回答3:
If you want to remove only line terminators that are valid on the current OS, you could do this:
text = text.replaceAll(System.getProperty(\"line.separator\"), \"\");
If you want to make sure you remove any line separators, you can do it like this:
text = text.replaceAll(\"\\\\r|\\\\n\", \"\");
Or, slightly more verbose, but less regexy:
text = text.replaceAll(\"\\\\r\", \"\").replaceAll(\"\\\\n\", \"\");
回答4:
str = str.replaceAll(\"\\\\r\\\\n|\\\\r|\\\\n\", \" \");
Worked perfectly for me after searching a lot, having failed with every other line.
回答5:
This would be efficient I guess
String s;
s = \"try this\\n try me.\";
s.replaceAll(\"[\\\\r\\\\n]+\", \"\")
edited for syntax highlight
回答6:
This function normalizes down all whitespace, including line breaks, to single spaces. Not exactly what the original question asked for, but likely to do exactly what is needed in many cases:
import org.apache.commons.lang3.StringUtils;
final String cleansedString = StringUtils.normalizeSpace(rawString);
回答7:
Linebreaks are not the same under windows/linux/mac. You should use System.getProperties with the attribute line.separator.
回答8:
String text = readFileAsString(\"textfile.txt\").replaceAll(\"\\n\", \"\");
Even though the definition of trim() in oracle website is
\"Returns a copy of the string, with leading and trailing whitespace omitted.\"
the documentation omits to say that new line characters (leading and trailing) will also be removed.
In short
String text = readFileAsString(\"textfile.txt\").trim();
will also work for you.
(Checked with Java 6)
回答9:
String text = readFileAsString(\"textfile.txt\").replace(\"\\n\",\"\");
.replace returns a new string, strings in Java are Immutable.
回答10:
You may want to read your file with a BufferedReader
. This class can break input into individual lines, which you can assemble at will. The way BufferedReader
operates recognizes line ending conventions of the Linux, Windows and MacOS worlds automatically, regardless of the current platform.
Hence:
BufferedReader br = new BufferedReader(
new InputStreamReader(\"textfile.txt\"));
StringBuilder sb = new StringBuilder();
for (;;) {
String line = br.readLine();
if (line == null)
break;
sb.append(line);
sb.append(\' \'); // SEE BELOW
}
String text = sb.toString();
Note that readLine()
does not include the line terminator in the returned string. The code above appends a space to avoid gluing together the last word of a line and the first word of the next line.
回答11:
I find it odd that (Apache) StringUtils wasn\'t covered here yet.
you can remove all newlines (or any other occurences of a substring for that matter) from a string using the .replace
method
StringUtils.replace(myString, \"\\n\", \"\");
This line will replace all newlines with the empty string.
because newline is technically a character you can optionally use the .replaceChars
method that will replace characters
StringUtils.replaceChars(myString, \'\\n\', \'\');
回答12:
FYI if you can want to replace simultaneous muti-linebreaks with single line break then you can use
myString.trim().replaceAll(\"[\\n]{2,}\", \"\\n\")
Or replace with a single space
myString.trim().replaceAll(\"[\\n]{2,}\", \" \")
回答13:
You can use apache commons IOUtils to iterate through the line and append each line to StringBuilder. And don\'t forget to close the InputStream
StringBuilder sb = new StringBuilder();
FileInputStream fin=new FileInputStream(\"textfile.txt\");
LineIterator lt=IOUtils.lineIterator(fin, \"utf-8\");
while(lt.hasNext())
{
sb.append(lt.nextLine());
}
String text = sb.toString();
IOUtils.closeQuitely(fin);
回答14:
You can use generic methods to replace any char with any char.
public static void removeWithAnyChar(String str, char replceChar,
char replaceWith) {
char chrs[] = str.toCharArray();
int i = 0;
while (i < chrs.length) {
if (chrs[i] == replceChar) {
chrs[i] = replaceWith;
}
i++;
}
}
回答15:
org.apache.commons.lang.StringUtils#chopNewline
回答16:
Try doing this:
textValue= textValue.replaceAll(\"\\n\", \"\");
textValue= textValue.replaceAll(\"\\t\", \"\");
textValue= textValue.replaceAll(\"\\\\n\", \"\");
textValue= textValue.replaceAll(\"\\\\t\", \"\");
textValue= textValue.replaceAll(\"\\r\", \"\");
textValue= textValue.replaceAll(\"\\\\r\", \"\");
textValue= textValue.replaceAll(\"\\r\\n\", \"\");
textValue= textValue.replaceAll(\"\\\\r\\\\n\", \"\");