1

我正在尝试编写一个程序,该程序将输入一个句子,然后输入两个字母,然后切换这些字母的所有实例,然后打印出切换后的句子。例如,他们可以输入

I like to eat bananas

然后是“e”和“a”,我的程序会打印

I lika to aet benenes 

这是我的代码,但最后它会打印出字符串索引。任何想法如何解决这一问题?

System.out.println("Write something awesome.");
String input1 = Keyboard.readString();
System.out.println("Pick a letter from that awesome sentence.");
char letter1 = Keyboard.readChar();
System.out.println("Pick another letter from that awesome sentence.");
char letter2 = Keyboard.readChar();

double let1 = (input1.length());
int let1Next = (int) let1;
double let2 = (input1.length());
int let2Next = (int) let2;

String newUserImput = input1.replace(input1.charAt(let1Next),
        input1.charAt(let2Next));
System.out.println(newUserImput);
4

6 回答 6

0

尝试使用 char 数组-

char letter1 = 'a';
char letter2 = 'e';
String s = "I like to eat bananas";
char[] chrs = s.toCharArray();
int n = chrs.length;
for (int i = 0; i < n; i++) {
    if (chrs[i] == letter1) {//if array contains letter1 at intdex i
        chrs[i] = letter2; //replace with letter 2
    } else if (chrs[i] == letter2) { //if array contains letter2 at intdex i
        chrs[i] = letter1;//replace with letter 1
    }    
}

String swapedString = new String(chrs);
System.out.println(swapedString );
于 2013-09-04T05:14:08.390 回答
0

试试这个。

char[] cs = input1.toCharArray();

for (int i = 0; i < cs.length; i++) {
    char c = cs[i];
    if (letter1 == c) {
        cs[i] = letter2;
    } else if (letter2 == c) {
        cs[i] = letter1;
    }
}

String newUserImput = new String(cs);
于 2013-09-04T04:12:18.207 回答
0

该方法replace将替换字符串中的所有字符

所以你想要的是

String new1 = input1.replace (letter1, letter2);
String new2 = input1.replace (letter2, letter1);

然后遍历原始字符串以查看 and 中的不同之new1new2

于 2013-09-04T01:33:10.433 回答
0

没有堆栈跟踪,我不得不猜测异常在这一行。

String newUserImput = input1.replace(input1.charAt(let1Next),
        input1.charAt(let2Next));

input1.charAt(let1Next) 解析为什么?

double let1 = (input1.length());
int let1Next = (int) let1;
double let2 = (input1.length());
int let2Next = (int) let2;

这不可能真的是你的意思。

let1Next 将表示数组的结尾 + 1,let2Next 也是如此。

因此,这里有两个主要错误:

  1. 您正在用它自己替换所有出现的给定字符。
  2. 您选择的字母超出了字符串的末尾。请记住,字符串索引(例如 String.charAt 的输入)是从 0 开始的,因此它们的范围是从 0 到 (length - 1)。通过指定 input1.length,您要求输入字符串最后一个字符之后的字符,因此StringIndexOutOfBoundsException.
于 2013-09-04T01:38:19.963 回答
0

您可以遍历包含用户句子所有字符的数组(您可以使用toCharArray调用 on 的方法获取此类数组input1),如果您发现letter1将其替换为,letter2反之亦然。
之后,您可以使用更新的数组创建新字符串new String(arrayOfCharacters)

于 2013-09-04T01:43:29.613 回答
-1

由于您尝试访问字符串之外的字符(有效范围是从 0 到 length-1),因此字符串索引越界。即使你使用了 length-1,你的代码也不会做你想做的事。你真正需要的是有两个虚拟占位符(我假设你的字符串永远不会包含'#'或'$')替换'a'和'e',然后用虚拟占位符交换'a'和'e'。代码如下:

System.out.println("Write something awesome.");
String input1 = "I like to eat bananas";//Keyboard.readString();
System.out.println("Pick a letter from that awesome sentence.");
char letter1 = 'e';
System.out.println("Pick another letter from that awesome sentence.");
char letter2 = 'a';

// dummy placeholders
char letter3 = '#';
char letter4 = '$';

String newUserImput = input1.replace (letter1, letter3);
newUserImput = newUserImput.replace (letter2, letter4);
newUserImput = newUserImput.replace (letter3, letter2);
newUserImput = newUserImput.replace (letter4, letter1);

System.out.println(newUserImput);        
于 2013-09-04T01:45:32.030 回答