4 回答

TA貢獻1895條經驗 獲得超7個贊
您獲得前導空字符串的原因是因為您的定界符(一系列非數字字符)引導字符串。這與以下原因相同:
String s = ","; String[] splitResult = s.split(",");
愿意splitResult
成為["",""]
。每有一個分隔符,即使它在字符串的開頭或結尾,也是在分割字符串中的兩個標記。如果定界符位于字符串的開頭、字符串的末尾,或者如果有兩個相鄰的定界符(由于貪婪量詞,在您的情況下不會發生這種情況,但在上述情況下會發生+
)String s = ",,";
,那么拆分結果將有空字符串。
解決問題的一種簡單方法是過濾掉空字符串。您知道它只能出現在輸入字符串的前面或后面,所以這不是真正的問題。例如:
檢查中的第一個和最后一個字符串
nums
。如果它們是空的,請刪除它們。使用正則表達式搜索數字,而不是按非數字拆分。
在運行代碼之前刪除任何前導/尾隨非數字。
我的 Java 不太流利,但我確信可能有一些更簡潔的 Java 習慣用法可以使用您提供的代碼來執行此操作。

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

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

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。如果不是,則什么也不做。
添加回答
舉報