-9

再会,

我的程序需要这样的函数:我需要检查服务器上的字符串,如果成功,它将返回布尔值 true,并修改数据,如果不将错误消息放入数据中并返回 false。这是 C++ 做事的方式。

boolean getStringFromServer(String& data)

但是,我需要在 Java 中执行此操作。不要,我在一个高度多线程的环境中工作。听说可以使用 StringBuffer 传入数据并进行修改。我真的可以得到一个示例代码吗?

4

3 回答 3

2
boolean getStringFromServer(StringBuilder sb)
{
  if(sb.indexOf("some magic string")!=-1)
  {
     //string found
     return true;
  }
  //not found
  //modify sb
  return false;
}

如何修改 sb 取决于您。看看java 文档

顺便说一句,您不能在 Java 中修改字符串,因为它是不可变的。

于 2013-07-01T17:28:02.253 回答
0

这里有几件事要记住:

  1. 在 java 中,您不能更改 String 的值。
  2. 在 java 中,您可以更改对 String 的引用的值。
  3. 在java中,所有的引用都是按值传递的。这意味着您可以在方法内更改 String 参数的值,但在方法退出时它会恢复为原始值。

这是一种不好的技术,但这里有一个使用所述技术的简单解决方案:

在名为 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;
  }
}

“更好”的解决方案是返回一个同时具有布尔值和错误消息的对象。

于 2013-07-01T19:26:09.767 回答
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并且有没有设置方法。此外,这private char[]也是final如此,它永远不能被分配额外的参考。

正如另一位用户建议的那样,您可以使用 aStringBuilder来完成您想要的。

于 2013-07-01T18:02:24.950 回答