再会,
我的程序需要这样的函数:我需要检查服务器上的字符串,如果成功,它将返回布尔值 true,并修改数据,如果不将错误消息放入数据中并返回 false。这是 C++ 做事的方式。
boolean getStringFromServer(String& data)
但是,我需要在 Java 中执行此操作。不要,我在一个高度多线程的环境中工作。听说可以使用 StringBuffer 传入数据并进行修改。我真的可以得到一个示例代码吗?
boolean getStringFromServer(StringBuilder sb)
{
if(sb.indexOf("some magic string")!=-1)
{
//string found
return true;
}
//not found
//modify sb
return false;
}
如何修改 sb 取决于您。看看java 文档。
顺便说一句,您不能在 Java 中修改字符串,因为它是不可变的。
这里有几件事要记住:
这是一种不好的技术,但这里有一个使用所述技术的简单解决方案:
在名为 HootBerry 的文件中
public class HootBerry
{
private String value;
HootBerry(final String initialValue)
{
value = initialValue;
}
public String getValue()
{
return value;
}
public void setValue(final String newValue)
{
value = newValue;
}
}
在其他文件中
public boolean blammo(final HootBerry data)
{
if *data is blammo* // use approparite java code here
{
return true;
}
else
{
blammo.setValue("data is not blammo");
return false;
}
}
“更好”的解决方案是返回一个同时具有布尔值和错误消息的对象。
针对某些人的说法,Java 完全是按值传递的。即使人们说数组和对象通过引用传递,他们真正的意思是数组和对象的引用是通过值传递的。例如,
public static void main(String[] args)
{
int[] numbers = new int[]{1,2,3};
change(numbers);
System.out.println(Arrays.toString(numbers)); //prints [1,2,3]
}
public static void change(int[] ra)
{
ra = new int[]{4,5,6};
}
尽管如此,这不是这里的问题。 Strings
是不可变的。这是因为您无法访问它们的索引来更改它们(您可以使用charAt()
来查看char
特定索引处的内容,但无法更改char
),因为char[]
该类String
使用的字符是private
并且有没有设置方法。此外,这private char[]
也是final
如此,它永远不能被分配额外的参考。
正如另一位用户建议的那样,您可以使用 aStringBuilder
来完成您想要的。