亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

.split() 和 [\\W] 創建一個額外的空字符串?

.split() 和 [\\W] 創建一個額外的空字符串?

拉莫斯之舞 2023-04-13 10:46:06
我正在創建一個小程序來將字符串拆分為標記(連續的英文字母字符,然后輸出標記的數量以及實際標記。問題是在逗號后跟一個額外的空字符串元素空間。我研究過正則表達式并了解 \W 是任何不是單詞字符的東西。String str = sc.nextLine();// creating an array of tokensString tokens[] = str.split("[\\W]");int len = tokens.length;System.out.println(len);for (int i = 0; i < len; i++) {     System.out.println(tokens[i]);  }輸入:Hello, World.預期輸出:2HelloWorld實際輸出:3HelloWorld注意:這是我的第一個堆棧溢出帖子,如果我做錯了什么請告訴我,謝謝
查看完整描述

3 回答

?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

Try str.split("\\W+") It 表示 1 個或多個非單詞字符

\W 只匹配 1 個字符。所以它在 處中斷,然后在空格處再次中斷 這就是為什么它會返回一個額外的空字符串。\W+ 將匹配 ', ' 作為一個,所以它只會中斷一次,所以你只會取回令牌。(它適用于多個令牌,而不僅僅是兩個。所以 'hello, world, again' 會給你 [hello,world,again]。


查看完整回答
反對 回復 2023-04-13
?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

嘗試這個


Scanner inputter = new Scanner(System.in);

System.out.print("Please enter your thoughts : ");

final String words = inputter.nextLine();

final String[] tokens = words.split("\\W+");

Arrays.stream(tokens).forEach(System.out::println);


查看完整回答
反對 回復 2023-04-13
?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

如果您使用,.split("\\W")如果出現以下情況,您將得到空項目:

  • 非單詞字符出現在字符串的開頭

  • 非字字符連續出現,一個接一個\W匹配 1 個非字字符,打斷字符串,然后下一個非字字符再次打斷它,產生空字符串。

有兩條出路。

要么刪除開頭的所有非單詞字符,然后拆分為\W+

String?tokens[]?=?str.replaceFirst("^\\W+",?"").split("\\W+");

或者,將字符塊與\w+模式匹配:

Pattern p = Pattern.compile("\\w+");

Matcher m = p.matcher("? ?abc=-=123");

List<String> tokens = new ArrayList<>();

while(m.find()) {

? ? tokens.add(m.group());

}

System.out.println(tokens)



查看完整回答
反對 回復 2023-04-13
  • 3 回答
  • 0 關注
  • 252 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號