2017-10-12 60 views
4

誰能告訴我這是爲什麼正常工作:如何從用戶輸入中分割「 n」?

String wanttosplit = "asdf...23\n..asd12"; 
String[] i = wanttosplit.split("\n"); 
output are: 
i[0] = asdf...23 
i[1] = ..asd12 

當我想從用戶一樣獲得數據:

import java.util.Scanner; 
Scanner scan = new Scanner(System.in); 
String wanttosplit = scan.next(); //user enter asdf...23\n..asd12 on the  keyboard 
String[] i = wanttosplit.split("\n"); 
output are: 
i[0] = asdf...23\n..asd12 

爲什麼它沒有在第一個例子中分裂樣的呢?

+0

你試過拆分(「\ n \ r」)嗎? – sai

+0

您是否嘗試過拆分(「\\ n」)? – GregaMohorko

回答

6

的區別在於\nString字面"asdf...23\n..asd12"由Java編譯器處理,而用戶輸入asdf...23\n..asd12傳遞到Scanner原樣。

Java編譯器用換行符(LF)替換轉義序列\n,換行符對應於UNICODE中的代碼點10。另一方面,Scanner傳遞給您兩個單獨的字符,即'\''n',因此當您將該字符串傳遞給split方法時,它不會找到LF代碼點分隔符。

您需要處理轉義序列\n自己,例如,通過傳遞split識別它正則表達式:

String[] i = wanttosplit.split("(?<!\\\\)\\\\n"); 

Demo.

0

在你的第二個例子中,用戶輸入的字符串包含反斜槓後跟字母n,但傳遞給wanttosplit.split()的參數是包含換行符的單個字符串。

在第一示例wanttosplit包含一個換行字符(因爲Java編譯器已經取代了圖案「\ n」與單個字符表示換行。

0

要分割AAT用戶輸入\n需要在\\n拆分因爲Java會挑\n作爲新行字符。 爲此如果添加另一個\\n爪哇將難逃換行字符,並在實際的文本,而不是分裂\n

0

看起來像你從字面上輸入「\」和' n'通過控制檯?掃描儀將不會清除該序列,而是將其作爲原樣。

當從掃描儀獲取輸入你也不需要分割線,因爲掃描儀下一個表演時總是給你一條線()

如果你想從用戶讀取多行,你應該調用next()多次。