split(“\ r \ n”)没有在java

时间:2015-10-08 09:43:19

标签: java regex string

我有一个基于webbrowser的app(客户端)和一个基于java的程序(服务器)。 我使用websocket-protocol进行客户端和服务器之间的连接。在成功握手之后,我将从客户端发送文本框到我的服务器。

所以我从我的应用程序(客户端)发送以下字符串:

{\r\n\"Name\":\"micheal\"\r\n}

当我的java程序获取字符串(保存在String str中)时,它在我的eclipse-console上打印了以下内容:

{\r\n\"Name\":\"micheal\"\r\n}

然后我的java程序调用解析器使用这段代码解析字符串str:

String delim = "\r\n";
// split content and put the elements in an array
String contentArray[] = str.split(delim);
//print the elements 
for(int i = 0;i<contentArray.length;i++){
    System.out.print(contentArray[i]+", "); 
}   

但是程序没有像我想的那样工作。解析器没有根据我的正则表达式delim =“\ r \ n”拆分我的String。我得到一个包含一个元素的数组,这是我原来的String:

{\r\n\"Name\":\"micheal\"\r\n}

我阅读了一些帖子,并尝试调整我的字符串,以便它可以工作,但它不起作用。

问题在我的情况下是什么问题,我该如何解决?

编辑1:我解决了。我从我的客户端发送以下字符串(基于webbrowse-based-App):

{\r\n\"Name\":\"micheal\"\r\n} 

我用

delim= "\\\\r\\\\n"

但我有一些问题。

可以解释我这个问题的原因吗?

为什么我要对包含regex =“\ r \ n \ n”的字符串使用delim =“\\\\ r \\\\ n”。我不理解它,因为当我将我的字符串放入代码中时,我的解析器工作正常。

3 个答案:

答案 0 :(得分:2)

测试它:

String delim =“\\\\ r \\\\ n”;

答案 1 :(得分:2)

您的代码看起来不错,请检查这是否符合您的要求

public class Main {

    public static void main(String[] args) throws Exception {

        String str = "{\r\n\"Name\":\"micheal\"\r\n}";

        String delim = "\r\n";
        // split content and put the elements in an array
        String contentArray[] = str.split(delim);
        //print the elements 
        for (int i = 0; i < contentArray.length; i++) {
            System.out.println(i+": "+contentArray[i]);
        }

        System.out.println("Tokens: "+contentArray.length);
    }
}

输出

0: {
1: "Name":"micheal"
2: }
Tokens: 3

如果情况如此

String str = "{\\r\\n\"Name\":\"micheal\"\\r\\n}";  

使用

String delim = "\\\\r\\\\n";

答案 2 :(得分:0)

您需要使用&#34; \\ r \\ n&#34;因为&#39; \&#39;是独特的角色,而不是逃避。

或尝试System.getProperty(&#34; line.separator&#34;)