gpt4 book ai didi

java - 是否可以通过在 for 循环中调用字符串名称来检查数百个字符串数组?

转载 作者:行者123 更新时间:2023-12-04 00:52:43 25 4
gpt4 key购买 nike

public class MaryPoppinsBagandWeasleyTent {
public static void main(String[] args) {
String[] darkorange = {"3darkchartreuse"};
String[] stripedfuchsia = {"5stripedlavender"};
String[] dullgray = {"4mutedcyan", "3lightmaroon"};
String[] dullchartreuse = {"3lighttan", "3dottedbronze"};
//etc for hundreds of lines
String[] names = {"darkorange", "stripedfuchsia",
"dullgray", "dullchartreuse"}; //etc for hundreds of lines
String directs = "";
for (int i = 0; i < names.length; i++) {
if (names[i].contains("shinygold")) {
System.out.println(names[i]);
directs += (names[i] + ",");
}
}
}
}

如上所示,字符串数组列表非常长。我有一个相应的字符串数组,其中包含所有字符串数组的所有名称。是否可以在 for 循环中调用这些字符串数组中的每一个?这就是我试图用 names[I] 做的事情,但它只调用 STRING names[i],而不是 String[]names[I] 的名字命名。

您可能讨厌极长的数组列表,但我可能很快就会学到更好的方法。

是否可以通过在 for 循环中调用字符串名称来检查数百个字符串数组?

最佳答案

tl;dr

为了更好地管理在编译时已知的此类不可变数据,为每个颜色组创建一个枚举,其中包含一组或一组颜色名称。

enum ColorGroup
{
DARK_ORANGE( List.of( "3darkchartreuse" ) ),
DULL_GRAY( List.of( "4mutedcyan" , "3lightmaroon" ) );

private List < String > colors;

// Constructor
ColorGroup ( List < String > colors )
{
this.colors = colors;
}

// Getter
public List < String > getColors ( )
{
return this.colors;
}
}

使用那个枚举。

for ( ColorGroup colorGroup : ColorGroup.values() )
{
System.out.println( "colorGroup name: " + colorGroup + " contains: " + colorGroup.getColors() );
}

colorGroup name: DARK_ORANGE contains: [3darkchartreuse]

colorGroup name: DULL_GRAY contains: [4mutedcyan, 3lightmaroon]


map

如果您想为每个数组关联一个文本名称,请使用 Map .映射将条目存储为配对,即指向值的键。在您的例子中,键是一个 String 对象,值是一个数组。

Map < String, String[] > map = new TreeMap <>();
map.put( "Dark Orange" , new String[] { "3darkchartreuse" } );
map.put( "Dull Gray" , new String[] { "4mutedcyan" , "3lightmaroon" } );

System.out.println( map );

运行时:

{Dark Orange=[Ljava.lang.String;@77459877, Dull Gray=[Ljava.lang.String;@5b2133b1}

枚举与文本

使用文本进行此类标记可能容易出错。例如,拼写 "Dark Grey""Dark Gray"

因此您可以选择使用非常简单但功能强大的 enum facility found in Java .枚举对象是 constants , 在他们的类加载时自动实例化。作为常量,它们的名称按照 Java 约定以全大写形式书写。作为命名对象,它们的使用会在编译时检测拼写错误,并提供 type-safety也是。

enum ColorGroupName
{
DARK_ORANGE,
DULL_GRAY
}

枚举 map

对于使用枚举对象作为键的Map,使用EnumMap使用很少的内存实现非常快速的执行。

Map < ColorGroupName, String[] > map = new EnumMap( ColorGroupName.class );
map.put( ColorGroupName.DARK_ORANGE , new String[] { "3darkchartreuse" } );
map.put( ColorGroupName.DULL_GRAY , new String[] { "4mutedcyan" , "3lightmaroon" } );

System.out.println( map );

集合与数组

我们中的许多人更喜欢 collections在数组上。

Map < ColorGroupName, List < String > > map = new EnumMap( ColorGroupName.class );
map.put( ColorGroupName.DARK_ORANGE , List.of( "3darkchartreuse" ) );
map.put( ColorGroupName.DULL_GRAY , List.of( "4mutedcyan" , "3lightmaroon" ) );

System.out.println( map );

运行时:

{DARK_ORANGE=[3darkchartreuse], DULL_GRAY=[4mutedcyan, 3lightmaroon]}

不可变数据

如果您的 map 是不变的,请使用 Map.of创建一个 unmodifiable map .

Map < ColorGroupName, List < String > > map =
Map.of(
ColorGroupName.DARK_ORANGE , List.of( "3darkchartreuse" ) ,
ColorGroupName.DULL_GRAY , List.of( "4mutedcyan" , "3lightmaroon" )
);

System.out.println( map );

包含数据的枚举

如果你想变得非常聪明,你可以将你的颜色列表存储在你的枚举中。

枚举是一种特殊的 Java 类,但仍然是 Java 类。作为Java类,它可以携带成员变量。它可以提供一个构造函数。要在枚举中存储数据,请将每个枚举对象的数据传递给其构造函数调用。

enum ColorGroup
{
DARK_ORANGE( List.of( "3darkchartreuse" ) ),
DULL_GRAY( List.of( "4mutedcyan" , "3lightmaroon" ) );

private List < String > colors;

// Constructor
ColorGroup ( List < String > colors )
{
this.colors = colors;
}

// Getter
public List < String > getColors ( )
{
return this.colors;
}
}

使用那个枚举。

for ( ColorGroup colorGroup : ColorGroup.values() )
{
System.out.println( "colorGroup name: " + colorGroup + " contains: " + colorGroup.getColors() );
}

colorGroup name: DARK_ORANGE contains: [3darkchartreuse]

colorGroup name: DULL_GRAY contains: [4mutedcyan, 3lightmaroon]

Map 实现

这是我为帮助选择 Map 实现而制作的图表。

enter image description here

关于java - 是否可以通过在 for 循环中调用字符串名称来检查数百个字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65262138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com