Intention is to take a current line which contains commas, store trimmed values of all space and store the line into the array.
Why does this not work?
String[] currentLineArray = currentInputLine.replace("\\s", "").split(",");
Intention is to take a current line which contains commas, store trimmed values of all space and store the line into the array.
Why does this not work?
String[] currentLineArray = currentInputLine.replace("\\s", "").split(",");
I think you want replaceAll rather than replace.
And replaceAll("\\s","")
will remove all spaces, not just the redundant ones. If that's not what you want, you should try replaceAll("\\s+","\\s")
or something like that.
The String
class has the following methods:
So here we see the immediate cause of your problem: you're using a regex pattern in a non-regex method. Instead of replace
, you want to use replaceAll
.
Other common pitfalls include:
split(".")
(when a literal period is meant)matches("pattern")
is a whole-string match!
contains("pattern")
; use matches(".*pattern.*")
insteadSplitter
Depending on your need, String.replaceAll
and split
combo may do the job adequately. A more specialized tool for this purpose, however, is Splitter
from Guava.
Here's an example to show the difference:
public static void main(String[] args) {
String text = " one, two, , five (three sir!) ";
dump(text.replaceAll("\\s", "").split(","));
// prints "[one] [two] [] [five(threesir!)] "
dump(Splitter.on(",").trimResults().omitEmptyStrings().split(text));
// prints "[one] [two] [five (three sir!)] "
}
static void dump(String... ss) {
dump(Arrays.asList(ss));
}
static void dump(Iterable<String> ss) {
for (String s : ss) {
System.out.printf("[%s] ", s);
}
System.out.println();
}
Note that String.split
can not omit empty strings in the beginning/middle of the returned array. It can omit trailing empty strings only. Also note that replaceAll
may "trim" spaces excessively. You can make the regex more complicated, so that it only trims around the delimiter, but the Splitter
solution is definitely more readable and simpler to use.
Guava also has (among many other wonderful things) a very convenient Joiner
.
System.out.println(
Joiner.on("... ").skipNulls().join("Oh", "My", null, "God")
);
// prints "Oh... My... God"
What you wrote does not match the code:
Intention is to take a current line which contains commas, store trimmed values of all space and store the line into the array.
It seams, by the code, that you want all spaces removed and split the resulting string at the commas (not described). That can be done as Paul Tomblin suggested.
String[] currentLineArray = currentInputLine.replaceAll("\\s", "").split(",");
If you want to split at the commas and remove leading and trailing spaces (trim) from the resulting parts, use:
String[] currentLineArray = currentInputLine.trim().split("\\s*,\\s*");
(trim()
is needed to remove leading spaces of first part and trailing space from last part)