Java 无法将字符串转换为StringBuffer

Java 无法将字符串转换为StringBuffer,java,Java,我正在制作playfair密码,遇到一个错误,字符串无法转换为StringBuffer。如何使我的程序工作?或者如何在不影响代码的情况下将StringBuffer转换为String public static StringBuffer addFiller (StringBuffer input) { for( int x = 0; x < input.length() - 1; x++) { if(input.substring(x+1

我正在制作playfair密码,遇到一个错误,字符串无法转换为StringBuffer。如何使我的程序工作?或者如何在不影响代码的情况下将StringBuffer转换为String

public static StringBuffer addFiller (StringBuffer input)
 {       
     for( int x = 0; x < input.length() - 1; x++)
     {
         if(input.substring(x+1, 1).equals(input.substring(x, 1)))
         {
           input = input.insert(x+1, "Q");
         }
         if("Q".equals(input.substring(x, 1)) && "Q".equals(input.substring(x+1, 1)))
         {
            input = input.insert(x+1, "Z");
         }
     }
     return input;
 }

 public static String modifyPlaintext(String keyword)
{      
    keyword = keyword.toUpperCase();
    keyword = keyword.trim();
    keyword = keyword.replace(" ","");
    //StringBuffer.toString(addFiller);
    keyword = addFiller(keyword); // error starts here and it says that keyword = java.lang.String "ALLISKNOWNFLYATONCE" even though I didn't initialize it. What does it mean?


    if (keyword.length() % 2 != 0)
        {
            keyword += "Q";
        }
        keyword = insertSpaceInSpecificNumber(2, keyword, ' ');

    return keyword;
}
publicstaticstringbufferaddfiller(stringbufferinput)
{       
对于(int x=0;x
1)创建
StringBuffer
对象并将其传递给
addFilter()

2) 通过
addFilter()
StringBuffer
返回的对象转换为
toString()
返回的字符串


String
也是最终的且不可变的

因此,这个类不能被任何其他类扩展或继承。因此,这两个类之间没有
is-A
关系。字符串不能直接转换或引用到除
java.lang.Object
之外的任何其他类

但是
StringBuffer
提供了一个构造函数,通过它可以将
String
转换为
StringBuffer
对象

public java.lang.StringBuffer(java.lang.String); //pass string as an argument. StringBuffer object will you get.
在您的情况下,请尝试以下代码:

addFilter(new StringBuffer(keyword)).toString();

使用:
keyword=addFiller(newstringbuffer(关键字)).toString()与您的问题并不完全一致,但更喜欢
StringBuilder
而不是
StringBuffer
。或者使用
char[]
String
在这里以什么方式妥协?与
String
不同,
StringBuffer
是可变的,像
insert
这样的操作会改变缓冲区。在像
input=input.insert(x+1,“Q”)这样的语句中
insert
操作更改
input
,然后它只返回相同的对象(即
input
),这意味着将方法的结果分配到
input
是浪费时间。您似乎正在使用
StringBuffer
的方式使用
String
,这不是
StringBuffer
(或
StringBuilder
)的要点。@ajb我该怎么办?我研究过,当您需要使用insert时,必须使用StringBuilder。所以现在我有一个错误,它没有被转换成字符串。使用
StringBuffer
StringBuilder
很好,答案告诉你如何在它们和
String
之间转换。我只是说,您不需要
input=
,如果您尝试更改
字符串
,它会生成一条错误消息:“字符串索引超出范围:-1”线程“main”java.lang.StringIndexOutofBoundException中的异常:字符串索引超出范围:-1 at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:908)在projecttrial2.projecttrial2.addFiller(projecttrial2.java:87)在projecttrial2.projecttrial2.modifyPlaintext(projecttrial2.java:105)在projecttrial2.projecttrial2.main(projecttrial2.java:47)中@CODECODE似乎错误在ProjectTrial2.java的第87行。你能为ProjectTrial2类发布代码吗?for(int x=0;xaddFilter(new StringBuffer(keyword)).toString();