如何在java字符串中查找模式

问题描述 投票:0回答:1

我对编码很陌生,如果我的问题很愚蠢,我很抱歉。我的老师要求我编写一个 java 程序,它将显示字符“a”、“b”、“c”、“d”到字符串中的所有可能组合,但遵循以下规则:

  1. 字符串长度必须为 4 个字符。
  2. 字母可以在同一字符串中重复。
  3. 字符“a”和“d”不能在同一个字符串中。
  4. 字符“b”后面必须始终跟有“a”。

我开始编写一个程序,但我被难住了。 方法“method1”不完整,我尝试使用 ArrayLists 但无法让它工作。

public class TN33
{   public TN33(char[] c)
    {
        for(int i = 0; i < c.length; i++) {
            for(int j = 0; j < c.length; j++) {
                for(int k = 0; k < c.length; k++) {
                    for(int l = 0; l < c.length; l++) {
                        final String str =(c[i]+""+c[j]+""+c[k]+""+c[l]);
                        method1(str); 
                    }

                }
            }
        }
    }

    public String method1(String x) {

        System.out.println(x);

        return x ;
    }

    public static void main(String[] args) {
        char[] c = {'a', 'b', 'c', 'd'};
        TN33 m1 = new TN33(c);
        
    }
}
java arrays arraylist methods
1个回答
0
投票

就计算排列而言,您的代码是正确的。

您只需要在创建 String 之前检查这些值。

这是一个例子。
需要注意的是,如果该值未出现,则 String#indexOf 方法将返回 −1,因此我们应该期望得到负乘积。

List<String> list = new ArrayList<>();
String s;
char w, x, y, z;
for (w = 'a'; w <= 'z'; w++)
    for (x = 'a'; x <= 'z'; x++)
        for (y = 'a'; y <= 'z'; y++)
            for (z = 'a'; z <= 'z'; z++) {
                s = "%s%s%s%s".formatted(w, x, y, z);
                if (s.indexOf('a') * s.indexOf('d') >= 0) continue;
                if (w == 'b' && x != 'a') continue;
                if (x == 'b' && y != 'a') continue;
                if (y == 'b' && z != 'a') continue;
                if (z == 'b') continue;
                list.add(s);
            }

输出

baaa baac baae baaf baag baah baai baaj baak baal baam baan baao baap baaq 
baar baas baat baau baav baaw baax baay baaz baba baca bacc bace bacf bacg 
bach baci bacj back bacl bacm bacn baco bacp bacq bacr bacs bact bacu bacv 
bacw bacx bacy bacz baea baec baee baef baeg baeh baei baej baek bael baem 
baen baeo baep baeq baer baes baet baeu baev baew baex baey baez bafa bafc 
bafe baff bafg bafh bafi bafj bafk bafl bafm bafn bafo bafp bafq bafr bafs 
baft bafu bafv bafw bafx bafy bafz baga bagc bage bagf bagg bagh bagi bagj 
bagk bagl bagm bagn bago bagp bagq bagr bags bagt bagu bagv bagw bagx bagy 
bagz baha bahc bahe bahf bahg bahh bahi bahj bahk bahl bahm bahn baho bahp 
bahq bahr bahs baht bahu bahv bahw bahx bahy bahz baia baic baie baif baig

...

zydw zydx zydy zydz zyea zyed zyfa zyfd zyga zygd zyha zyhd zyia zyid zyja 
zyjd zyka zykd zyla zyld zyma zymd zyna zynd zyoa zyod zypa zypd zyqa zyqd 
zyra zyrd zysa zysd zyta zytd zyua zyud zyva zyvd zywa zywd zyxa zyxd zyya 
zyyd zyza zyzd zzaa zzac zzae zzaf zzag zzah zzai zzaj zzak zzal zzam zzan 
zzao zzap zzaq zzar zzas zzat zzau zzav zzaw zzax zzay zzaz zzba zzca zzcd 
zzdc zzdd zzde zzdf zzdg zzdh zzdi zzdj zzdk zzdl zzdm zzdn zzdo zzdp zzdq 
zzdr zzds zzdt zzdu zzdv zzdw zzdx zzdy zzdz zzea zzed zzfa zzfd zzga zzgd 
zzha zzhd zzia zzid zzja zzjd zzka zzkd zzla zzld zzma zzmd zzna zznd zzoa 
zzod zzpa zzpd zzqa zzqd zzra zzrd zzsa zzsd zzta zztd zzua zzud zzva zzvd 
zzwa zzwd zzxa zzxd zzya zzyd zzza zzzd 
© www.soinside.com 2019 - 2024. All rights reserved.