第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

解析數(shù)字字符串時(shí)的額外空字符串

解析數(shù)字字符串時(shí)的額外空字符串

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

4 回答

?
人到中年有點(diǎn)甜

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊

您獲得前導(dǎo)空字符串的原因是因?yàn)槟亩ń绶ㄒ幌盗蟹菙?shù)字字符)引導(dǎo)字符串。這與以下原因相同:

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

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

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

  • 檢查中的第一個(gè)和最后一個(gè)字符串nums。如果它們是空的,請(qǐng)刪除它們。

  • 使用正則表達(dá)式搜索數(shù)字,而不是按非數(shù)字拆分。

  • 在運(yùn)行代碼之前刪除任何前導(dǎo)/尾隨非數(shù)字。

我的 Java 不太流利,但我確信可能有一些更簡(jiǎn)潔的 Java 習(xí)慣用法可以使用您提供的代碼來(lái)執(zhí)行此操作。


查看完整回答
反對(duì) 回復(fù) 2023-05-24
?
明月笑刀無(wú)情

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊

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));


查看完整回答
反對(duì) 回復(fù) 2023-05-24
?
繁華開(kāi)滿(mǎn)天機(jī)

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊

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(",")));


查看完整回答
反對(duì) 回復(fù) 2023-05-24
?
FFIVE

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

為此,我會(huì)檢查 StringUtils 庫(kù): https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html

假設(shè)這是一個(gè)學(xué)校項(xiàng)目并且外部庫(kù)不是一個(gè)選項(xiàng),那么這段代碼應(yīng)該適合你:

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 將包含您的數(shù)字 ArrayList。


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


查看完整回答
反對(duì) 回復(fù) 2023-05-24
  • 4 回答
  • 0 關(guān)注
  • 263 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)