Java:replaceAll和.split换行不起作用

时间:2013-03-27 20:56:16

标签: java string while-loop bufferedreader

我想要分割一行(inputLine),这是

Country: United Kingdom
City: London

所以我正在使用这段代码:

public void ReadURL() {

    try {
        URL url = new URL("http://api.hostip.info/get_html.php?ip=");
        BufferedReader in = new BufferedReader(
        new InputStreamReader(url.openStream()));

        String inputLine = "";
        while ((inputLine = in.readLine()) != null) {
            String line = inputLine.replaceAll("\n", " ");
            System.out.println(line);
        }

        in.close();
    }   catch ( Exception e ) {
        System.err.println( e.getMessage() );
    }
}

运行方法时,输出仍为

Country: United Kingdom
City: London

不喜欢这样:

Country: United Kingdom City: London

现在我尝试使用

\n,\\n,\r,\r\n

System.getProperty("line.separator")

但它们都不起作用并使用replacesplitreplaceAll,但没有任何效果。

那么如何删除换行符以生成一行String?

更多细节:我想要它所以我有两个单独的字符串

String Country = "Country: United Kingdom";

String City = "City: London";

那会很棒

3 个答案:

答案 0 :(得分:1)

您应该使用System.out.println(line);而不是System.out.print(line);

新行由println()方法引起,该方法通过写行分隔符字符串来终止当前行。

答案 1 :(得分:0)

http://docs.oracle.com/javase/1.5.0/docs/api/java/io/BufferedReader.html#readLine()

阅读。 readLine方法不会在文本中返回任何回车符或新行,并且会通过换行符中断输入。所以你的循环确实会占用整个文本块,但它会逐行读取。

您还可以通过调用println获得额外的换行符。它会在读入时打印您的行,添加一个新行,然后打印空白行+换行符,然后输出结束行+换行符,为您提供与输入完全相同的输出(减去几个空格)。

您应该使用print而不是println。

答案 2 :(得分:0)

我建议你看看番石榴Splitter.MapSplitter

在你的情况下:

// input = "Country: United Kingdom\nCity: London"
final Map<String, String> split = Splitter.on('\n')
    .omitEmptyStrings().trimResults().withKeyValueSeparator(": ").split(input);
// ... (use split.get("Country") or split.get("City")