美好的一天,
我的程序需要一个函数:我需要检查服务器上的字符串,如果成功,它将返回一个布尔值true,并修改数据,如果没有在数据中放入错误消息并返回假。这是C ++的做事方式。
boolean getStringFromServer(String& data)
但是,我需要在Java中执行此操作。不要,我正在一个高度多线程的环境中工作。我听说你可以使用StringBuffer传入数据并进行修改。我真的可以获得示例代码吗?
答案 0 :(得分:2)
boolean getStringFromServer(StringBuilder sb)
{
if(sb.indexOf("some magic string")!=-1)
{
//string found
return true;
}
//not found
//modify sb
return false;
}
你如何修改某人取决于你。看看java doc。
顺便说一下,你不能在Java中修改String,因为它是不可变的。
答案 1 :(得分:0)
回应一些人所说的,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
,并且没有setter方法。此外,private char[]
也是final
,因此永远不会为其分配额外的引用。
正如其他用户建议的那样,您可以使用StringBuilder
来完成您想要的工作。
答案 2 :(得分:0)
以下是一些需要记住的事项:
这是一种糟糕的技术,但这是使用所述技术的简单解决方案:
名为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;
}
}
“更好”的解决方案是返回一个同时包含布尔值和错误消息的对象。