繁体   English   中英

我如何从一种方法返回值并交换

[英]How can i return value from one method to another & swapping

我有这个

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”。 ”

这与您提供的替换地图兼容。 它还处理大写和小写字母:

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"));
    }
}

如果您尝试设置字符超出缓冲区,StringBuffer.setCharAt()将引发异常。 您没有在缓冲区中放入任何东西。

另外,请看一下创建缓冲区的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM