【问题标题】:Is there a way to input 2 strings into 1 string and have them not effect each others input?有没有办法将 2 个字符串输入 1 个字符串并且它们不会影响彼此的输入?
【发布时间】:2018-04-12 05:18:24
【问题描述】:

假设我有ABab,我想用ACac 替换A,用CAca.... 替换a。我尝试的输出给了我ACCAcacBCAcab,而它应该是ACacBCAcab 我不确定如何绕过它,因为你可以看到它也改变了输入Acac 中的小写a。我希望能够将这些一直输入到Z,如您所见haha,这是我的代码:

import java.util.*;
public class Nails 
{
    public static void main(String[] args) 
    {
        Scanner i = new Scanner(System.in);
        String[][] comms = { { "ACac", "CAca" }, { "ADad", "DAda" }, { "AEae", "EAea" }, { "AFaf", "FAfa" },
        { "AGag", "GAga" }, { "AHah", "HAha" }, { "AIai", "Iaia" }, { "AJaj", "JAja" }, { "AKak", "KAka" },
        { "ALal", "LAla" }, { "AMam", "MAma" }, { "ANan", "NAna" }, { "AOao", "OAoa" }, { "APap", "PApa" },
        { "AQaq", "QAqa" }, { "ARar", "RAra" }, { "ASas", "SAsa" }, { "ATat", "TAta" }, { "AUau", "UAua" },
        { "AVav", "VAva" }, { "AWaw", "WAwa" }, { "AXax", "XAxa" }, { "AYay", "YAya" }, { "AZaz", "ZAza" } };

        String Master = "ABab";
        String S = Master; //Slave String
        String Tmp = S; 
        System.out.println("Amount of Nails: ");
        int N = i.nextInt(); //Nails
        if(N < 2)
        {
            System.out.println("Sorry, You Must input a number Greater than or Equal to 2");
        }
        if(N == 2)
        {
            System.out.println(Master);
        }
        else
        {
            for(int c = 0; c < N - 2; c++) //C for Counter, subtracting 2 because method wont run if it is <= 2 and 'Comms' starts on 0 which would be 3 Nails
            {
                System.out.println(S);
                S = S.replace("A", Comms[c][0]);
                S = S.replace("a", Comms[c][1]);
                System.out.println(S);
            }
        }
    }
}

小写字母代表大写字母的合成,这就是为什么每添加 1 个“钉子”就有 2 个条目。我正在制作这个程序,以便能够为这个谜题创建一个公式生成器: Nail Puzzle。如果有帮助,视频创建者还会解释一些数学计算。 谢谢。

【问题讨论】:

  • 对我来说,这看起来不像是与任何标签相关的问题,它只是寻找合适算法的问题,为此问题的标题不太清楚。跨度>
  • @Stephan Hernmann - 我没有代表选择任何合适的标签,而且我在 eclipse 中工作,正在做 java,需要字符串帮助,我不记得为什么我放正则表达式,但我可以假设因为整个项目都是基于一个谜题。你说得对,我需要找到一个算法,我什至不知道如何理解这个来制作一个简洁而恰当的标题,因为我的代码知识非常基础,对不起标题

标签: java regex string eclipse


【解决方案1】:

您可以使用占位符。将字符替换为占位符,将占位符替换为实际字符串。

import java.util.*;

public class Q47028607 {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String[][] comms = { { "ACac", "CAca" }, { "ADad", "DAda" }, { "AEae", "EAea" }, { "AFaf", "FAfa" },
        { "AGag", "GAga" }, { "AHah", "HAha" }, { "AIai", "Iaia" }, { "AJaj", "JAja" }, { "AKak", "KAka" },
        { "ALal", "LAla" }, { "AMam", "MAma" }, { "ANan", "NAna" }, { "AOao", "OAoa" }, { "APap", "PApa" },
        { "AQaq", "QAqa" }, { "ARar", "RAra" }, { "ASas", "SAsa" }, { "ATat", "TAta" }, { "AUau", "UAua" },
        { "AVav", "VAva" }, { "AWaw", "WAwa" }, { "AXax", "XAxa" }, { "AYay", "YAya" }, { "AZaz", "ZAza" } };
    String master = "ABab";
    System.out.println("Amount of Nails: ");
    int N = scanner.nextInt();
    if (N < 2) {
      System.out.println("Sorry, You Must input a number Greater than or Equal to 2");
    } else if (N == 2) {
      System.out.println(master);
    } else {
      for (int c = 0; c < N - 2; c++) {
        System.out.println(master);
        master = master.replace("A", "$1");
        master = master.replace("a", "$2");
        master = master.replace("$1", comms[c][0]);
        master = master.replace("$2", comms[c][1]);
        System.out.println(master);
      }
    }
    scanner.close();
  }
}

【讨论】:

    【解决方案2】:

    我做了类似徐院长的事情,但我只是想在改变其他角色之后改变角色哈哈所以这是我的结束代码:

    import java.util.*;
    public class Nails 
    {
        public static void main(String[] args) 
        {
            Scanner i = new Scanner(System.in);
            String[][] Comms = {{"AC1c", "CAc1"}, {"AD1d", "DAd1"}, {"AE1e", "EAe1"}, {"AF1f", "FAf1"}, {"AG1g", "GAg1"}, {"AH1h", "HAh1"}, {"AI1i", "I1i1"}, {"AJ1j", "JAj1"}, {"AK1k", "KAk1"}, {"AL1l", "LAl1"}, {"AM1m", "MAm1"}, {"AN1n", "NAn1"}, {"AO1o", "OAo1"}, {"AP1p", "PAp1"}, {"AQ1q", "QAq1"}, {"AR1r", "RAr1"}, {"AS1s", "SAs1"}, {"AT1t", "TAt1"}, {"AU1u", "UAu1"}, {"AV1v", "VAv1"}, {"AW1w", "WAw1"}, {"AX1x", "XAx1"}, {"AY1y", "YAy1"}, {"AZ1z", "ZAz1"}};
            String Master = "ABab";
            String S = Master; //Slave String
            String Tmp = S; 
            System.out.println("Amount of Nails: ");
            int N = i.nextInt(); //Nails
            if(N < 2)
            {
                System.out.println("Sorry, You Must input a number Greater than or Equal to 2");
            }
            if(N == 2)
            {
                System.out.println(Master);
            }
            else
            {
                for(int c = 0; c < N - 2; c++) //C for Counter, subtracting 2 because method wont run if it is <= 2 and 'Comms' starts on 0 which would be 3 Nails
                {
                    S = S.replace("A", Comms[c][0]);
                    S = S.replace("a", Comms[c][1]);
                    S = S.replace("1", "a");
                }
                System.out.println(S);
            }
        }
    }
    

    【讨论】:

    • 但是我可以删除我认为我会需要它的 TMP 字符串
    【解决方案3】:

    建议 :: 使用 StringBuilder 代替 String。由于您正在对字符串执行多项操作,因此会影响您的性能和内存使用情况。使用 StringBuilder 将提高性能。

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2023-02-24
      • 1970-01-01
      • 2021-01-25
      相关资源
      最近更新 更多