【问题标题】:get only integer values of a string and find second maximum仅获取字符串的整数值并找到第二个最大值
【发布时间】:2017-11-02 15:40:16
【问题描述】:

给定字符串:“1 22a 34 718 u3ou1。”目的是只找到 int 值,在本例中是 1 和 34 和 718。我这样尝试:

    String str = "1 22a 34 718 u3ou1.";      
    str = str.replaceAll("[^-?0-9]+", "*"); 
    System.out.println(Arrays.asList(str.trim()));

它的输出是:[1 22 34 718 3 1]。 输出应为:[1 34 718]。 有人可以找到错误吗?

【问题讨论】:

  • 不要把非数字变成数字?
  • 字符+数字的每一部分都应该忽略
  • 但你没有这样做。您正在提取包含字符的部分并删除字符,让您无法区分“真实”数字和应该忽略的内容。
  • 是的,我知道,我不知道例如如何删除“22a”

标签: java string int


【解决方案1】:

您可以尝试解析元素,在使用空格作为分隔符分割后:

String str = "1 22a 34 718 u3ou1.";

String[] split = str.split(" +");

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

    for (String s : split) {
        try {
            Integer.parseInt(s);
            list.add(s);
        } catch (NumberFormatException e) {

            /**
             *
             *do Nothing
             *
             * */
        }
    }
    System.out.println(list);

【讨论】:

    【解决方案2】:

    我相信最好使用拆分:

    private List<int> intArray(string str)
    {
     data = str.Split('');
     var result = new List<int>();
     for (var item in data)
     {
       int number=0;
       if (int.TryParse(item,out number))
       {
             result.Add(number);
       }
     }
    
     return result
    }
    

    警告: 1. 没有检查/测试过代码

    2.. 我刚刚意识到问题出在 java 中,而我的代码是 C#

    【讨论】:

    • @progress190,是的,它确实...让您自己将其转换为您喜欢的数据类型 Ienumerable
    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2014-12-07
    相关资源
    最近更新 更多