213

I have prepared a simple code snippet in order to separate the erroneous portion from my web application.

public class Main {

    public static void main(String[] args) throws IOException {
        System.out.print("\nEnter a string:->");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String temp = br.readLine();

        String words[] = temp.split(".");

        for (int i = 0; i < words.length; i++) {
            System.out.println(words[i] + "\n");
        }
    }
}

I have tested it while building a web application JSF. I just want to know why in the above code temp.split(".") does not work. The statement,

System.out.println(words[i]+"\n"); 

displays nothing on the console means that it doesn't go through the loop. When I change the argument of the temp.split() method to other characters, It works just fine as usual. What might be the problem?

Tiny
  • 27,221
  • 105
  • 339
  • 599
Bhavesh
  • 4,607
  • 13
  • 43
  • 70

7 Answers7

549

java.lang.String.split splits on regular expressions, and . in a regular expression means "any character".

Try temp.split("\\.").

Tiny
  • 27,221
  • 105
  • 339
  • 599
rob mayoff
  • 375,296
  • 67
  • 796
  • 848
73

The documentation on split() says:

Splits this string around matches of the given regular expression.

(Emphasis mine.)

A dot is a special character in regular expression syntax. Use Pattern.quote() on the parameter to split() if you want the split to be on a literal string pattern:

String[] words = temp.split(Pattern.quote("."));
millimoose
  • 39,073
  • 9
  • 82
  • 134
16

Try:

String words[]=temp.split("\\.");

The method is:

String[] split(String regex) 

"." is a reserved char in regex

ysrb
  • 6,693
  • 2
  • 29
  • 30
11

The method takes a regular expression, not a string, and the dot has a special meaning in regular expressions. Escape it like so split("\\."). You need a double backslash, the second one escapes the first.

mbatchkarov
  • 15,487
  • 9
  • 60
  • 79
6

\\. is the simple answer. Here is simple code for your help.

while (line != null) {
    //             
    String[] words = line.split("\\.");
    wr = "";
    mean = "";
    if (words.length > 2) {
        wr = words[0] + words[1];
        mean = words[2];

    } else {
        wr = words[0];
        mean = words[1];
    }
}
Tiny
  • 27,221
  • 105
  • 339
  • 599
Israr Khan
  • 118
  • 1
  • 7
4

It works fine. Did you read the documentation? The string is converted to a regular expression.

. is the special character matching all input characters.

As with any regular expression special character, you escape with a \. You need an additional \ for the Java string escape.

Tiny
  • 27,221
  • 105
  • 339
  • 599
Matthew Flaschen
  • 278,309
  • 50
  • 514
  • 539
3
    private String temp = "mahesh.hiren.darshan";

    String s_temp[] = temp.split("[.]");

  Log.e("1", ""+s_temp[0]);
Hiren Patel
  • 52,124
  • 21
  • 173
  • 151