我准备了一个简单的代码片段,以便从我的web应用程序中分离错误的部分。

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");
        }
    }
}

我在构建web应用程序JSF时对它进行了测试。我只是想知道为什么在上面的代码temp.split(“。”)不工作。声明,

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

在控制台上不显示任何内容意味着它不经过循环。当我将temp.split()方法的参数更改为其他字符时,它像往常一样工作得很好。有什么问题吗?


它工作得很好。你看过说明书了吗?字符串转换为正则表达式。

. 匹配所有输入字符的特殊字符。

与任何正则表达式的特殊字符一样,使用\进行转义。Java字符串转义还需要一个额外的\。


Try:

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

方法是:

String[] split(String regex) 

"."是正则表达式中的保留字符


split对正则表达式进行拆分。在正则表达式中表示“任何字符”。

尝试temp.split(“\ \”。)。


关于split()的文档说:

围绕给定正则表达式的匹配来拆分此字符串。

(强调我的。)

点是正则表达式语法中的一个特殊字符。如果你希望split是一个字面值的字符串模式,则在参数上使用pattern .quote()来split():

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

该方法接受一个正则表达式,而不是字符串,并且点在正则表达式中具有特殊含义。Escape it like so split("\\.")。你需要一个双反斜杠,第二个转义第一个。


    private String temp = "mahesh.hiren.darshan";

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

  Log.e("1", ""+s_temp[0]);

\ \。答案很简单。下面是一些简单的代码。

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];
    }
}