Java 如何获取数组中以“开始”开头的元素的大小;名称“;后面跟着一个数字,例如:name1、name20等

Java 如何获取数组中以“开始”开头的元素的大小;名称“;后面跟着一个数字,例如:name1、name20等,java,arrays,Java,Arrays,我被要求查找数组的大小,数组是一个map参数的键集,其键以“name”开头,后跟任意数字 params.keySet() 上面的代码给出了键数组,如下所示 [name6,name3,id,名称,版本,访问id,密码,name2,name7, 名称1,类型,名称4] 我已经尝试了以下对我有效的方法,现在的问题是在不迭代的情况下实现它 int nameSize=0; for(String paramKey : params.keySet()){ if(paramKey.startsWith(

我被要求查找数组的大小,数组是一个map参数的键集,其键以“name”开头,后跟任意数字

params.keySet()
上面的代码给出了键数组,如下所示

[name6,name3,id,名称,版本,访问id,密码,name2,name7, 名称1,类型,名称4]

我已经尝试了以下对我有效的方法,现在的问题是在不迭代的情况下实现它

int nameSize=0;
for(String paramKey : params.keySet()){
   if(paramKey.startsWith("name[0-9]"))
      nameSize++;
    }
System.out.println("The size of the name is : "+nameSize);
我的预期产出是:

名字的大小是:6

请帮助我在不迭代数组中的每个元素的情况下执行此操作。

“name”不等于“name0”


您可以使用正则表达式(
startsWith
不接受您尝试的正则表达式):

编辑: 是的,它也会在每个元素上迭代,但可能会使用多个线程


编辑2(对Java的请求当然你必须迭代
集合
(不是数组,你自己这么说的)。你可以做
keySet.stream().filter(key->key.matches(“name\\d++”)).count()
,但这只是将迭代内部化。或者像你那样,用paramKey.matches(“name\\d+”)替换paramKey.startsWith(“name[0-9]”)我不想把“name”改为“name”,后面至少跟一个数字,这对Java 8来说很好,但我的代码基础是坚持Java 7在Java 7上实现这一点的任何建议我添加了一个Java 7示例“Java@BoristheSpider,因为他试图在
startsWith
上使用正则表达式,但该正则表达式无效。@BoristheSpider是的,您是对的。更改为“可以”
if(paramKey.startWith("name[0-9]") || paramKey.equals("name"))
    nameSize++;
if(paramKey.startWith("name"))
    nameSize++;
String[] s = {"name6", "name3", "id", "name", "version",
            "access-id", "password", "name2", "name7", "name1", "type", "name4", "ARGHname3ARGH"};

Pattern p = Pattern.compile("^name\\d+");
long l = Arrays.stream(s).filter(p.asPredicate()).count();
String[] s = {"name6", "name3", "id", "name", "version",
        "access-id", "password", "name2", "name7", "name1", "type", "name4"};
List<String> s2 = Arrays.asList(s);
int size = Collections2.filter(s2, Predicates.containsPattern("^name\\d+")).size();