更改REALLY长字符串的每个字母

时间:2017-09-07 12:21:06

标签: java encoding cryptography

我正在尝试制作一个程序,将每个字母改为其他字母 即a = q,b = w,c = e等......

当我插入较小的字符串时程序工作正常,但是当我尝试读取文件并将返回的字符串输入到我的方法时,它不会正确翻译字母。我的方法如下:

    public static String converString(String conversionString) {

    String letters = "abcdefghijklmnopqrstuvwxyz";
    String encodedLetters = "qwertyuiopasdfghjklzxcvbnm";

   conversionString = conversionString.toLowerCase();

    char[] letterChar = letters.toCharArray();
    char[] encChar = encodedLetters.toCharArray();

    char[] stringChar = conversionString.toCharArray();

    for (int i = 0; i < stringChar.length; i++) {

        for (int j = 0; j < letterChar.length; j++) {
            if(letterChar[j] == stringChar[i]) {
                conversionString = conversionString.replace(letterChar[j], encChar[j]);
            }
        }

    }
    return conversionString;

}

如果我输入一个小字符串进行转换,它可以正常工作,但当我读取一个大文本文件时(如下所示:)

public class ReadFile {


public String readFile(Charset encoding) throws IOException {

    {
        byte[] encoded = Files.readAllBytes(Paths.get("HugeTextFile.txt"));
        return new String(encoded, encoding);
    }

它无法正常工作(如果文本文件很小,它可以正常工作,但我要转换的文本是1k +行)

当我尝试转换大文件时,这是我得到的一些文本的示例输出:

   qlqqq'l qqqqfqqqql qf qqfqqqlqfq

lqqql qqqqqll

qqqqqqq q. qqqf qqq qqqqqq-qqlq

qlqqq qql qqqqffqfq qq qqq qqqf qqqqq qf lqqqqfq qf qqq lqlqqq qf qqq
qqfq, qfq qf qqqqfq fqqqqfq qq qq: qfqq qq qqqqq lqq qqq qqqqqq qfqq qqq
qqqq qqq lqlqqq qql qqqqqfq, qqq qq qqq fq qqqqqqql qq qqfqqqlqqqqfl qf
qq, 'qfq qqqq ql qqq qlq qf q qqqq,' qqqqqqq qlqqq 'qqqqqqq qqqqqqql qq
qqfqqqlqqqqfl?'

lq lqq qql qqflqqqqqfq qf qqq qqf qqfq (ql qqll ql lqq qqqlq, fqq qqq

但是文本本身并没有使用那么多,因为这是输出。任何人都可以帮我解释为什么只有大文本才会发生这种情况吗?

2 个答案:

答案 0 :(得分:1)

试试这个。

for(int i=0;i<stringChar.length;i++){
    stringChar[i]=encChar[stringChar[i]-97];
}

答案 1 :(得分:1)

问题是您正在替换已经替换的字符。据我所知,你想根据&#34;字典&#34;更改字符串中的字母。你提供。使用您正在使用的数据结构,可以解决此问题:

public static String convertString(String conversionString) {

  String letters =        "abcdefghijklmnopqrstuvwxyz";
  String encodedLetters = "qwertyuiopasdfghjklzxcvbnm";

  conversionString = conversionString.toLowerCase();

  char[] letterChar = letters.toCharArray();
  char[] encChar = encodedLetters.toCharArray();

  char[] stringChar = conversionString.toCharArray();

  StringBuilder sb = new StringBuilder();

  for (int i = 0; i < stringChar.length; i++) {
    int j = letters.indexOf(stringChar[i]); 
    sb.append(conversionString.substring(i, i + 1).replace(letterChar[j], encChar[j]));   
  }

  return sb.toString();
}
相关问题