在每个可能的位置将字母插入字符串

时间:2016-12-01 18:41:56

标签: java string

我希望将一个字母逐个插入到字符串的每个可能索引中。

例如字符串ry

会去"ary" "bry" "cry" ... "zry" ... "ray" "rby" .... "rzy" ... "rya" "ryb" 我不知道如何开始,任何帮助?

6 个答案:

答案 0 :(得分:2)

试试这个 System.out.println("originaltext".replaceAll(".{1}","$0ry"));

以上是使用String replaceAll(String regex,String replacement)方法 - “将此字符串的每个子字符串替换为给定替换的给定正则表达式。”

“。{1}” - 用于查找任何字符的恰好一次出现({1})的正则表达式(。)

“$ 0ry” - 匹配值后跟所需字符(ry)的替换字符串“$ 0”。

所有比赛都会重复这个!

答案 1 :(得分:1)

示例代码

String originalString = /* your original string */;
char[] characters = /* array of characters you want to insert */;
Vector<String> newStrings = new Vector<>();

String newString;
for (int idx = 0; idx < originalString.length() + 1; ++idx) {
    for (char ch : characters) {
        newString = originalString.substring(0, idx)
                  + ch
                  + originalString.substring(idx, originalString.length());
        newStrings.add(newString);
    }
}

解释

处理所有案件:

为了将每个字母插入字符串中的索引,您需要一个循环来遍历每个字母。

为了在字符串中的每个索引中插入一个字母,您需要一个循环来遍历字符串中的每个索引。

要同时执行这两项操作,您应该将一个循环嵌套在另一个循环中。这样,将处理索引和字符的每个组合。在你提出的问题中,哪个循环进入另一个循环并不重要 - 它将以任何一种方式工作。

(你实际上必须遍历字符串+1中的每个索引......我在下面解释原因)

形成新字符串:

首先,请务必注意以下事项:

  • 你想要做的不是&#34;将一个字符插入一个索引&#34;而是#34;在两个索引之间插入一个字符&#34;区别很重要,因为您不希望替换该索引处的前一个字符,而是将所有从该索引开始的字符向右移动一个索引,以便为该索引处的新字符腾出空间。 &#34;

这就是你必须遍历原始字符串的每个索引加上一个的原因。因为一旦你&#34;插入&#34;字符,新字符串的长度实际上等于originalString.length() + 1,即有n + 1个可能的位置,您可以在其中插入&#34;这个角色。

考虑到这一点,你实际形成一个新字符串的方式(以你想要的方式)是通过获取目标索引左侧的所有内容,将所有内容放在目标索引的右侧,然后将它们连接到目标索引的右侧。中间的新角色,例如leftSubstring + newCharacter + rightSubstring

现在,似乎这对第一个和最后一个索引都不起作用,因为leftSubstring和/或rightSubstring是一个空字符串。但是,即使使用空字符串,字符串连接仍然有效。

关于示例代码的注释

  • characters也可以是实现iterable的任何集合。它不必是原始数组。
  • characters不必包含原始char元素。它可以包含任何可以与String连接的类型。
  • 请注意,String的substring(int,int)方法返回子字符串,包括 beginIndex 处的字符,但不包括 {{1}处的字符}。这意味着endIndex可能等于endIndex而没有任何问题。

答案 2 :(得分:0)

你需要一个从i = 0到你的字符串长度的循环 然后是你要插入的每个字符的另一个循环 - 所以如果你想继续用A到Z的每个可能字母创建新字符串,请从char A ='a'到'z'进行循环并继续增加它们++ A(这应该适用于java)。

这应该会给你一些想法。

答案 3 :(得分:0)

例如,假设您希望它们都在列表中,您可以执行类似的操作(迭代所有位置以插入并迭代所有字母):

List<String> insertLetters(String s) {
    List<String> list = new ArrayList<String>();
    for (int i = 0; i <= s.length(); i++) {
        String prefix = s.substring(0, i);
        String postfix = s.substring(i, s.length());
        for (char letter = 'a'; letter <= 'z'; letter++) {
            String newString = prefix + letter + postfix;
            list.add(newString);
        }
    }
    return list;
}

答案 4 :(得分:0)

String x = "ry";
    char[] alphabets = "abcdefghijklmnopqrstuvwxyz".toCharArray();
    String[] alphabets2 = new String[alphabets.length];
    for (int i=0;i<alphabets.length;i++){
        char z = alphabets[i];
        alphabets2[i] = z + x;
    }
    for (String s: alphabets2
         ) {
        System.out.println(s);
    }

答案 5 :(得分:-1)

首先,您需要一个字母数组(更容易继续)。

我不会给你确切的答案,但要开始,所以你会学习。

int length = 0;      这里的数组

 while(length <= 2) {

     think what would be here: hint you put to index (length 0) the all alphabet and move to index 1 and then 2


 }