[英]Compare String elements in an Array
我正在尝试比较数组中的元素。 例如,
labels = ["abc1","abc2","abc3","abc4"]
我想采用具有最高值的字符串。 在这种情况下,它的 abc4。 我对编码很陌生,所以如果有人可以帮助我理解逻辑,那就太好了。
您正在寻找的是一种将每个字符串相互比较的方法。
Java 有一个内置的方法来为String
class 执行此操作,称为compareTo
方法。 顾名思义,它将一个字符串与另一个字符串进行比较。
String a = "abc1";
String b = "abc2";
String c = "abc1";
System.out.println(a.compareTo(b)); // prints a negative number because `a` is smaller than `b`
System.out.println(b.compareTo(a)); // prints a positive number because `b` is bigger than `a`
System.out.println(c.compareTo(a)); // prints 0 because `a` and `b` have the same letters.
有关compareTo
方法,请参阅官方 java 文档:
[返回]如果参数字符串等于该字符串,则值为 0; 如果此字符串按字典顺序小于字符串参数,则值小于 0; 如果此字符串按字典顺序大于字符串参数,则值大于 0。
您可以在示例中使用它的方式是:
String biggest = labels[0];
for(int i = 1; i < labels.length; i++){
if(biggest.compareTo(labels[i]) < 0) biggest = labels[i];
}
System.out.println(biggest);
注意:有关此方法如何选择“更大”的更多详细信息,请参阅 java 文档(上面链接)。 如果您有自己的规则来决定哪个更大,那么您可以制定自己的方法来定义它。
更新:例如,请参阅 XtremeBaumer 的评论
"abc20".compareTo("abc100") = 1。表示 abc20 大于 abc100,因此 compareTo() 不一定对任务有用
您的问题需要改进,根据您所说的,让我们从字符串中删除所有 abc,获取最大 integer,然后返回或打印"abc" concatenated to the max number
:
import java.util.Arrays;
import java.util.stream.IntStream;
public class Solution {
public static void main(String[] args) throws Throwable {
int numberOfElements = 100;
String[] labels = new String[numberOfElements];
Arrays.setAll(labels, element -> "abc" + element);
int max = Arrays.stream(labels).mapToInt(element -> Integer.parseInt(element.substring(3))).max().getAsInt();
System.out.println(String.join(" | ", labels));
System.out.println();
System.out.println();
System.out.println("The max here is : ");
System.out.println("abc" + max);
}
}
Output 这里:
abc0 | | abc1 | | abc2 | | abc3 | | abc4 ...... || abc99
The max here is :
abc99
尝试这样的事情:
var strings = new ArrayList<String>();
strings.add("abc1");
strings.add("abc2");
strings.add("abc3");
strings.add("abc4");
var integers = strings
.stream()
.map(string -> Integer.valueOf(string.replaceAll("[^0-9]+", "")))
.collect(Collectors.toList());
var max = Collections.max(integers);
var indexMax = integers.indexOf(max);
var maxString = strings.get(indexMax);
System.out.println(maxString);
更简单的方法: @mcieciel已经发布了这个。
List<String> list = Arrays.asList("abc1", "abc22", "abc33", "abc19");
List<Integer> intList = list.stream()
.map(s -> Integer.parseInt(s.replaceAll("[^0-9]+", "")))
.collect(Collectors.toList());
int index = intList.indexOf(Collections.max(intList));
System.out.println(list.get(index));
另一种方法是创建一个map
,它将在键值对中包含字符串及其对应的 integer 值。然后从 map 中找到带有其键的最大值。
这可能是矫枉过正。
String key = list.stream()
.collect(Collectors.toMap( // creating map like this format : abc1->1 , abc22->22 ...
Function.identity(), // key of the map i.e the string value
s -> Integer.parseInt(s.replaceAll("[^0-9]+", "")), // integer value
(e1, e2) -> e1)) // if multiple same entry exists choose one
.entrySet() // now we have map, we can iterate and find out the key which holds max value
.stream()
.max((e1, e2) -> Integer.compare(e1.getValue(), e2.getValue())) // comparing values
.get()
.getKey();
System.out.println(key);
注意:如果您有没有任何数字的字符串值,则两者都不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.