我正在尝试制作一个程序,将每个字母改为其他字母 即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
但是文本本身并没有使用那么多,因为这是输出。任何人都可以帮我解释为什么只有大文本才会发生这种情况吗?
答案 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();
}