Java 无法将字符串转换为StringBuffer
我正在制作playfair密码,遇到一个错误,字符串无法转换为StringBuffer。如何使我的程序工作?或者如何在不影响代码的情况下将StringBuffer转换为StringJava 无法将字符串转换为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
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();