如何使用一串字母(用户输入)并将所有重复的字符与X分开?

时间:2017-11-07 09:44:14

标签: java encryption arraylist substring

    System.out.print("Enter the message to encrypt: ");
    message = s.next().toString();  // this message is inserted

    List<String> strings = new ArrayList<String>(); 

    int index = 0;
    while (index < message.length())
    {
     strings.add(message.substring(index, Math.min(index + 2, 
     message.length())));   
              // separates the list by two's. i.e. [ST, EV, EN] for "Steven"
        index += 2;
    }
    System.out.println(strings);  // prints out list
    break;  // end of case

    /*

我想对这段代码做什么是由X分开的重复字符,以便,例如,如果名称&#34;威廉&#34;插入后,它会插入[WI,LX,LI,AM]。此外,如果有一个奇数字母(即BOB),你可以用&#34; X&#34;填写最后一个数字。使它成为一对:[BO,BX]

我一直在搜索堆栈溢出,无法找到答案,所以非常感谢任何建议!         * /

3 个答案:

答案 0 :(得分:1)

这里while循环中的条件应该是

while (index+2 < message.length())

否则可能导致索引超出绑定异常。

答案 1 :(得分:0)

首先,您必须创建替换为“X”的字符串。 然后把它放在循环中

this.add_new_user(_data, _data.uid)

答案 2 :(得分:0)

你可以通过简单地检查子串是否由相同的字符组成,然后你可以取第一个字符并将其与'X'连接并将其添加到列表中并将索引增加1.除此之外,只需添加列表中的子字符串并将索引增加2.下面是我修改的while循环:

while (index < message.length())
        {
         //strings.add(message.substring(index, Math.min(index + 2, message.length()))); 

         String str = message.substring(index, Math.min(index + 2, 
                 message.length()));

                  // separates the list by two's. i.e. [ST, EV, EN] for "Steven"
         if(str.length() == 1 || str.charAt(0) == str.charAt(1)) {
             strings.add(str.charAt(0) + "X");
             index += 1;
         }
         else{
             strings.add(str);
             index += 2;
         }

        }