如何从数组中替换字符串字符

时间:2015-09-28 03:54:52

标签: java arrays string loops indexof

我试图创建一个加密方案,用相应的字母替换String中的字母。

例如,在字符串" apple"中," a"替换为" k",依此类推。每个字母都有一个固定的相应字母。

我希望获得用户输入并将其存储到数组中。 然后我想遍历数组并找到String的每个索引。然后用相应的字母替换每个索引。

这是我到目前为止所做的事情,但我无法使代码运行。我主要是error: incompatible types

我无法确定是否应该使用charAt方法并将我的变量类型更改为char。

import java.util.*;

public class Encrypt {

    public static void main(String [] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter the String Name to encrypt:");
        String inputString = input.nextLine();
        String[] str = new String[inputString];
        replaceString();
    }

    public static void replaceString() {

        for(int i = 0; i < str.length(); i++) {
            if(str.indexOf(i) == "a") {
                str.indexOf(i) = "k";
            } else if(str.indexOf(i) == "b") {
                str.indexOf(i) = "n";
            }
            //and so on A-Z...
            System.out.print(str);
        }

    }
}

3 个答案:

答案 0 :(得分:2)

为什么要使用String[]? IMO您应该使用char[],以下代码将执行您想要的操作:

public static void main(String[] args) throws IOException {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter the String Name to encrypt:");
    String inputString = input.nextLine();
    char[] str = inputString.toCharArray();
    replaceString(str);
}

public static void replaceString(char[] str) {
    int length = str.length;
    for(int i = 0; i < length; i++) {
        if(str[i] == 'a') {
            str[i] = 'k';
        } else if(str[i] == 'b') {
            str[i] = 'n';
        }
    }
        System.out.println(Arrays.toString(str));
        System.out.println(String.valueOf(str));
}

运行程序:

  

输入要加密的字符串名称:bat
  [n,k,t] nkt

答案 1 :(得分:1)

您正在寻找String#replace(char oldChar, char newChar)

  

返回一个新字符串,该字符串是用newChar替换此字符串中所有出现的oldChar而生成的。

您的代码必须循环预定的次数并将每个String存储在数组中

Scanner input = new Scanner(System.in);
String[] str = new String[5];
for (int i = 0; i < 5; i++){
    System.out.println("Enter the String Name to encrypt:");
    String inputString = input.nextLine();
    str[i] = inputString.replace('a', 'k');
}
for (String s : str){
    System.out.println("Encrypted word: " + s);
}

您之前声明数组的方式,

String[] str = new String[inputString];

不正确。查看here以使用数组练习更多内容。基本上,公式是:

Type[] myArr = new Type[sizeOfArray];

答案 2 :(得分:1)

问题是String.indexOf()给出了第一次出现的索引。它不会取代字符串。

str.indexOf(i) = "k"; //won't replace anything here

顺便说一句,您的代码中还有其他一些语法错误。

试试这个例子,如果你想使用循环:

&#13;
&#13;
import java.util.Scanner;
class Ideone {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter the String Name to encrypt:");
    String str = input.nextLine();
    input.close();
    str = replaceString(str); // note, self assignment
    System.out.println(str);
  }

  public static String replaceString(String str) {
    char[] tmp = str.toCharArray();// get all into array
    for (int i = 0; tmp.length > i; i++) {
      if ('a' == tmp[i]) {
        tmp[i] = 'k';
      } else if ('b' == tmp[i]) {
        tmp[i] = 'n';
      }
    }
    return new String(tmp); //create new string with modified array
  }
}
&#13;
&#13;
&#13;

运行代码here

正如其他人所建议的那样,您也可以查看String.replaceAll()

&#13;
&#13;
import java.util.Scanner;
class Ideone {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter the String Name to encrypt:");
    String str = input.nextLine();
    input.close();
    str = replaceString(str);
    System.out.println(str);
  }

  public static String replaceString(String str) {
    return str.replaceAll("a", "k").replaceAll("b", "n");
  }
}
&#13;
&#13;
&#13;

运行代码here