如何将价值从一种方法返回到另一种方法&交换

时间:2010-12-14 15:14:20

标签: java return-value swap

我有这个

public class Mapper implements ScramblerIF
{
 private static String map = "drsjckpwrypwsftylmzxopqtdo";

public static String charAt(String str) 
{
 //char[] chars = str.toCharArray();
int length = str.length();

 for(int i=0; i<length; i++)
{
 char aChar = str.charAt(i);
 char upper = Character.toUpperCase(aChar);
 int num = (upper - 'A');
char mChar = map.charAt(num);
 //String chard = Character.toString(mChar);

 StringBuffer buf = new StringBuffer( str);
   buf.setCharAt( i, mChar );
 }
   return str;
 }

public String scramble(String str) {
return charAt(str);
 }
}

我想把它带到方法

的地方
 public String scramble(String str) {
return charAt(str);
 }

返回计算值
 public static String charAt(String str)

方法。不知道我哪里出错了。

也代替使用

StringBuffer buf = new StringBuffer( str);
   buf.setCharAt( i, mChar );

我怎么能使用交换功能? 当我尝试

 char temp = chars[i];
chars[i] = chars[mChar];
chars[mChar] = temp;

我得到一个ArrayIndexOutOfBoundsException。 我想要做的总结是“对于原始字符串中的每个字符,使用它在字母表中的位置来查找它在地图字符串中的替换。例如,字符串”dog“将被翻译为”jtp“。 “

2 个答案:

答案 0 :(得分:1)

使用您提供的 replacement-map 进行搜索。它还处理大写和小写大小写字母:

public class Mapper {
    //                           abcdefghijklmnopqrstuvwxyz
    private static String map = "drsjckpwrypwsftylmzxopqtdo";

    public static String scramble(String str) {

        if (!str.matches("[A-Za-z]*"))
            throw new RuntimeException(str + " contains weird characters");

        String out = "";
        for (char c : str.toCharArray()) {
            if (Character.isUpperCase(c)) {
                out += Character.toUpperCase(map.charAt(c - 'A'));
            } else {
                out += map.charAt(c - 'a');
            }
        }

        return out;

    }

    public static void main(String[] args) {
        System.out.println(scramble("David"));
    }
}

答案 1 :(得分:0)

如果您尝试将字符设置在缓冲区之外,

StringBuffer.setCharAt()将抛出异常。你没有把任何东西放在缓冲区里。

此外,请查看创建缓冲区的时间。