【问题标题】:How to obtain numeric and non-numeric values from a String如何从字符串中获取数字和非数字值
【发布时间】:2015-03-02 11:28:29
【问题描述】:

假设有三个字符串:

String s1 = "6A";
String s2 = "14T";
String s3 = "S32";

我需要提取数值(即 6,14 和 32)和字符(A、T 和 S)。

如果第一个字符始终是数字,则此代码将起作用:

int num = Integer.parseInt(s1.substring(0,1));

但是,这不适用于s2s3

【问题讨论】:

  • 例如,您可以使用s1.replaceAll("\\D+",""); 从字符串中删除所有非数字。
  • 考虑像String.replaceAll() (docs) 在解析值之前从每个字符串中去除所有非数字字符。
  • 这个问题之前已经在这里回答过:stackoverflow.com/questions/4030928/…

标签: java string character


【解决方案1】:

你可以做这样的事情:

public static int getNumber(String text){
    return Integer.parseInt(text.replaceAll("\\D", ""));
}

public static String getChars(String text){
    return text.replaceAll("\\d", "");
}

public static void main(String[] args) {
    String a = "6A";
    String b = "14T";
    String c = "S32";

    System.out.println(getNumber(a));
    System.out.println(getChars(a));
    System.out.println(getNumber(b));
    System.out.println(getChars(b));
    System.out.println(getNumber(c));
    System.out.println(getChars(c));
}

输出:

6 一个 14 吨 32 S

【讨论】:

    【解决方案2】:

    试试这个:

    String numberOnly = s1.replaceAll("[^0-9]", "");
    int num = Integer.parseInt(numberOnly);
    

    或者简短的:

    int num = Integer.parseInt(s1.replaceAll("[^0-9]", ""));
    

    该代码同样适用于 s2 和 s3!

    【讨论】:

    • 谢谢。我怎样才能得到一个字符(-s)?
    • s1.replaceAll("[0-9]", "")
    【解决方案3】:

    您可以使用 java.util.regex 包,它包含两个最重要的类

    1) 模式类

    2) 匹配器类

    使用这些类来获得您的解决方案。

    有关模式和匹配器类的更多详细信息,请参阅下面的链接

    http://www.tutorialspoint.com/java/java_regular_expressions.htm

    下面是完整的例子

    public class Demo {
    public static void main(String[] args) {
        String s1 = "6A";
        String s2 = "14T";
        String s3 = "S32";
    
        Pattern p = Pattern.compile("-?\\d+");
        Matcher m = p.matcher(s3);
        while (m.find()) 
        {
            System.out.println(m.group());
        }
    
    }
    }
    

    如果您需要字符串并且想跳过数值,请使用以下模式。

    Pattern p = Pattern.compile("[a-zA-Z]");
    

    【讨论】:

      【解决方案4】:

      你可以检查字符串中的第一个字符是否是字母,如果是,那么做

      Integer.parseInt(s1.substring(1))
      

      表示从第二个字符开始解析

      【讨论】:

      • 如果第二个字符也是一个字母?你会检查所有的吗?没有真正回答问题
      • 没有指定问题,否则 s1.replaceAll("[^0-9],"") 会有所帮助
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      相关资源
      最近更新 更多