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

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

解析數字字符串時的額外空字符串

解析數字字符串時的額外空字符串

藍山帝景 2023-05-24 17:40:44
試圖僅從此字符串中獲取數字?!癮bcd10efgh20”但是,下面的代碼返回一個數組,其中的數字開頭為空字符串。["", "10", "20"]String[] nums = s.split("\\D+"); System.out.println(Arrays.toString(nums));期望 ["10", "20"][編輯]我的問題是為什么我在數組的開頭得到一個空字符串?不是如何使用正則表達式?從字符串中獲取數字序列。如何更好地編碼?
查看完整描述

4 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

您獲得前導空字符串的原因是因為您的定界符(一系列非數字字符)引導字符串。這與以下原因相同:

String s = ",";
String[] splitResult = s.split(",");

愿意splitResult成為["",""]。每有一個分隔符,即使它在字符串的開頭或結尾,也是在分割字符串中的兩個標記。如果定界符位于字符串的開頭、字符串的末尾,或者如果有兩個相鄰的定界符(由于貪婪量詞,在您的情況下不會發生這種情況,但在上述情況下會發生+String s = ",,";,那么拆分結果將有空字符串。

解決問題的一種簡單方法是過濾掉空字符串。您知道它只能出現在輸入字符串的前面或后面,所以這不是真正的問題。例如:

  • 檢查中的第一個和最后一個字符串nums。如果它們是空的,請刪除它們。

  • 使用正則表達式搜索數字,而不是按非數字拆分。

  • 在運行代碼之前刪除任何前導/尾隨非數字。

我的 Java 不太流利,但我確信可能有一些更簡潔的 Java 習慣用法可以使用您提供的代碼來執行此操作。


查看完整回答
反對 回復 2023-05-24
?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

String s = "abcd10efgh20dsd2323sdfsdfsdf";

s = s.replaceAll("[aA-zZ]+", ",");


if (s.charAt(0) == ',') { s = s.replaceFirst(",", ""); }

if (s.charAt(s.length()-1) == ',') { s = s.substring(0, s.length()-1); }


String[] nums = s.split(",");


System.out.println(s);

System.out.println(Arrays.toString(nums));


查看完整回答
反對 回復 2023-05-24
?
繁華開滿天機

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

String str="abcd10efgh20asdasd30";

    str=str.replaceAll("\\D+", ",");

    System.out.println(str);

    if(str.startsWith(","))

    {

        str=str.replaceFirst(",","");

    }

    System.out.println(str);

    System.out.println(Arrays.toString(str.split(",")));


查看完整回答
反對 回復 2023-05-24
?
FFIVE

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

為此,我會檢查 StringUtils 庫: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html

假設這是一個學校項目并且外部庫不是一個選項,那么這段代碼應該適合你:

String s = "abcd10efgh20";

    String[] nums = s.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");

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

    for (int i = 0; i < nums.length; i++) {

        if (nums[i].matches("-?\\d+(\\.\\d+)?"))

        {

            realnums.add(nums[i]);

        }

    }

realnums 將包含您的數字 ArrayList。


基本上,您所做的是在字符串的第一部分找到數字時將其拆分,然后遍歷該數組并使用正則表達式來確定數組的每個元素是否為數字。如果是,則將其添加到新的 realnums ArrayList。如果不是,則什么也不做。


查看完整回答
反對 回復 2023-05-24
  • 4 回答
  • 0 關注
  • 266 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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