字符串中最大的数字[Java]

时间:2015-05-18 15:24:14

标签: java string

我已经开始非常有趣的问题,并会批准一些提示和提示来解决它。

问题是:"找到字符串中的最大数字。"。例如,如果我输入 String s = "123dja321kk12vas"该程序应输出321。

5 个答案:

答案 0 :(得分:3)

使用正则表达式拆分字符串然后循环遍历所有元素,将它们解析为数字并获得最大值。

由于String.split()要求您提供与分隔符匹配的正则表达式,即在您的情况下,数字之间的所有内容,请使用正则表达式\D+,即"至少一个非正则序列数字字符"。请注意,\d也匹配非ASCII数字,因此\D不匹配,所以如果您只想解析ASCII数字,则应使用[^0-9]+

粗略的例子:

String[] elements = input.split("[^0-9]+");
for( String element : elements ) {
  //skip empty elements, see note
  if( element.isEmpty() ) { 
    continue; 
  }
  //parse and compare here
}

一个注意事项:String.split()不会删除数组开头的空元素(例如,当您以非数字字符开头时),因此您需要跳过循环中的空元素。 / p>

答案 1 :(得分:3)

在Java 8中你可以做到

// split by non-digits trimming the leading non-digits.
long max = Stream.of(text.replaceAll("^\\D+","").split("\\D+"))
                 .mapToLong(Long::parseLong)
                 .max().orElse(-1);

答案 2 :(得分:0)

如果不是数字,则不需要它。因此,您可以使用\D+等表达式和split(String regex)方法。这应该只产生存储为字符串数组的数字。

一旦你有一个数值的字符串数组,只需检查它们,将它们转换为整数并将它们与你的数据进行比较。

答案 3 :(得分:0)

我不知道java,但这是一种可能的算法:

  1. 循环通过字符串。
  2. 如果该字符不是数字,则不执行任何操作。
  3. 如果字符是数字,请继续循环,直到您点击非数字。
  4. 将号码保存在容器中。
  5. 重复直到循环结束。
  6. 循环访问容器以查看哪个数字最大。

答案 4 :(得分:0)

java代码

public static void main(String args[]){
    ArrayList<Integer>num= new ArrayList<Integer>();
    String str="143dja321kk5vas";
    StringBuilder sb = new StringBuilder();
    for(char c : str.toCharArray()){
        if(Character.isDigit(c)){
            sb.append(c);
            int value = Character.getNumericValue(c);
            num.add(value);

        } 
    }


    System.out.println(num);
    Set<Integer> hs = new HashSet<Integer>();
    hs.addAll(num);
    num.clear();
    num.addAll(hs);

    Collections.reverse(num);
    System.out.println(num);
    System.out.println(num.get(num.size()-1));

    String listString = "";

    for (Integer s : num)
    {
        listString += s ;
    }

    System.out.println(listString);
}