我已经开始非常有趣的问题,并会批准一些提示和提示来解决它。
问题是:"找到字符串中的最大数字。"。例如,如果我输入
String s = "123dja321kk12vas"
该程序应输出321。
答案 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,但这是一种可能的算法:
答案 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);
}