簡體   English   中英

解析此String的更簡潔方法?

[英]Cleaner way to parse this String?

我期望一個字符串格式為“%s_%d.y”。 例如,“ aabsa_124.y”或“ x_5.y”。

我正在使用以下代碼提取String的數字部分,是否有更干凈的方法來提取數字?

String suffix = input.split("_")[1];
String numeric = suffix.split("\\.")[0];
int number = Integer.parseInt(numeric)

您還可以使用RegExp來更好地捕獲所需的號碼。 此處的regExp使用正向先行(?=)和向后看(?<=)。 如果您不希望前行/后行邏輯,也可以使用簡單組。

String input = "aabsa_124.y";
Pattern p = Pattern.compile("(?<=\\_)\\d+(?=\\.\\w+)");
Matcher m = p.matcher(input);
if (m.find()) {
    int number = Integer.parseInt(m.group());
    System.out.println(number);//124
}

這也將匹配字符串“ str_str_2.y”。

可能是這樣的:

        String s = "aabsa_124.y";
        int number = Integer.parseInt(s.replaceAll("[^\\d]", ""));

您可以將所有非degit替換為空,然后可以解析int:

int number = Integer.parseInt(input.replaceAll( "[^\\d]", ""));

如果您的String包含許多整數,並且您想要提取此整數,則可以使用Patterns例如:

String input = "aabsa_124_155.y";
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(input);

while (m.find()) {
    System.out.println(m.group());
}

輸出量

124
155

重要的是用好名字和單元測試以其自己的方法抽象解析邏輯。 這將使您的代碼干凈。

我個人將為此使用正則表達式。

對於您所描述的輸入,您的實現是可以的,但對於“ str_str_2.y”或“ str_2.34.y”之類的示例將無法使用。

在使用一些棘手的襯墊之前,請記住以下幾點:

任何傻瓜都可以編寫計算機可以理解的代碼。 好的程序員編寫人類可以理解的代碼。

馬丁·福勒(Martin Fowler),2008年。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM