标签: stringbuffer

使用 Java 将对象添加到 Vector 会丢失引用吗?

我有一个包含许多对象的向量。我的代码使用循环根据特定条件将对象添加到 Vector。我的问题是,当我将对象添加到 Vector 时,原始对象引用是否添加到向量中,或者 Vector 是否创建该对象的新实例并添加它?

例如,在以下代码中:

private Vector numbersToCalculate;
StringBuffer temp = new StringBuffer();

while(currentBuffer.length() > i) {
    //Some other code
    numbersToCalculate.add(temp);
    temp.setLength(0); //resets the temp StringBuffer
}
Run Code Online (Sandbox Code Playgroud)

我正在做的是将“temp”StringBuffer 添加到numbersToCalculate Vector 中。我应该在循环中创建一个新的 StringBuffer 并添加它,还是这段代码可以工作?谢谢您的帮助!

埃里克

java vector stringbuffer

2
推荐指数
1
解决办法
5256
查看次数

StringBuffer对象可以作为Java中TreeSet的键吗?

我有以下代码,试图将 StringBuffer 对象作为键放入 TreeSet 中。我这样做的原因是看看是否可以将可变对象作为键。我没有收到任何编译错误。但是当我运行此代码时,我收到代码下方的错误。特别是,我明白了java.lang.StringBuffer cannot be cast to java.lang.Comparable。这个错误表明什么?

从javadoc我看到StringBuffer类被声明为final(public final class StringBuffer),这是否意味着它是不可变的,因此是可散列的?

我是散列和不可变的东西的新手,所以请在这里帮助我。

谢谢

import java.util.*;
class MutableKeys {
public static void main(String[] args) {
        StringBuffer one = new StringBuffer("one");
        StringBuffer  two = new StringBuffer("two");
        StringBuffer three = new StringBuffer("three");
        Set<StringBuffer> sb=new TreeSet<StringBuffer>();
        sb.add(one);
        sb.add(two);
        sb.add(three);
        System.out.println("set before change: "+ sb);
        one.append("onemore");
        System.out.println("set After change: "+ sb);
    }
}

Exception in thread "main" java.lang.ClassCastException: java.lang.StringBuffer cannot be cast to java.lang.Comparable
    at java.util.TreeMap.put(TreeMap.java:542)
    at java.util.TreeSet.add(TreeSet.java:238) …
Run Code Online (Sandbox Code Playgroud)

java stringbuffer hashset comparable treeset

2
推荐指数
1
解决办法
5730
查看次数

为什么 String、StringBuffer 和 StringBuilder 类使用字节数组而不是字符数组来存储字符串的字符?

一个字节不能容纳来自世界上各种语言的字符的 unicode。所以使用字节数组我们不能有不同语言的字符串。为什么这些类使用字节数组而不是字符数组?

更新:

class First
{
        public static void main(String[] args)
        {
                System.out.println();
                String s = "\u0935\u0902\u0926\u0947 \u092e\u093e\u0924\u0930\u092e\u094d";
                String s1 = "???? ??????";
                System.out.println(sb);
                System.out.println(sb1);
        }
}
Run Code Online (Sandbox Code Playgroud)

我认为上面的字符串每个字符需要两个字节。它们如何可以容纳在一个字节中?

java string stringbuilder stringbuffer java-9

2
推荐指数
1
解决办法
427
查看次数

StringBuffer如何通过类中没有字段的空格传递数据?

给定:Class没有字段,每个变量都是本地的.littleString是通过在Eclipse中重构bigString创建的:

public String bigString()
    {
        StringBuffer bob = new StringBuffer();
        this.littleString(bob);
        return bob.toString();
    }

private void littleString(final StringBuffer bob)
    {
        bob.append("Hello, I'm Bob");
    }
Run Code Online (Sandbox Code Playgroud)

方法littleString不应该传回StringBuffer,但它是.什么样的黑魔法在这里?这打破了我所知道的所有封装规则.我很震惊,言语让我失望.

java stringbuffer

1
推荐指数
1
解决办法
3303
查看次数

1
推荐指数
2
解决办法
2106
查看次数

一个改进的StringBuffer - Java.Lang

我想创建自己的StringBuffer,它还有2-3个方法添加到java.lang.StringBuffer中.由于原始类是final,我无法扩展该类.

现在,如果我将类复制粘贴到我自己的类中,则表示"AbstractStringBuilder不可见"错误.

如何在我自己的命名空间中扩展此类(比如com.util).

java stringbuffer

1
推荐指数
3
解决办法
290
查看次数

在String问题中插入多个单词

我想在String中插入多个单词,但offset相对于原始String:

StringBuffer sb = new StringBuffer("abcdefghijk");
sb.insert(3,"123");
sb.insert(5,"456");
System.out.println(sb); 
Run Code Online (Sandbox Code Playgroud)

结果:

abc124563defghijk
Run Code Online (Sandbox Code Playgroud)

我希望结果是:

abc123de456fghijk
Run Code Online (Sandbox Code Playgroud)

我能怎么做?谢谢你的任何建议.

java string stringbuilder stringbuffer

1
推荐指数
1
解决办法
325
查看次数

构造函数不工作,以后调用时不接受参数?

所以对于我正在做的任务(仍然是初学者)我有一个名为Anagram的类的默认构造函数,它看起来像这样:

private StringBuffer word1, word2

public void Anagram(String s, String d){

    StringBuffer word1 = new StringBuffer(s);
    StringBuffer word2 = new StringBuffer(d);
}
Run Code Online (Sandbox Code Playgroud)

但是当我从另一个文件中调用此方法时,如下所示:

public Opponent(){
    Anagram an = new Anagram(RandomWord.nextWord(),RandomWord.nextWord());
    turn = 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,说构造函数不接受任何参数?我究竟做错了什么?

java methods constructor stringbuffer

1
推荐指数
1
解决办法
55
查看次数

Sonar抱怨:使用StringBuilder而不是StringBuffer

我目前正在做一段代码,必须能够匹配一些正则表达式,并在匹配正则表达式的字符串中进行一些替换.

为了做到这一点,我在java中使用matcher对象.但正如您可以在互联网上看到的那样,所有示例都使用StringBuffer来使用appendreplacement和appendtail方法(oracleDoc)进行替换.

但是当我推送我的代码时,Sonar抱怨使用stringbuffer而不是stringbuilder.

  • 在这种情况下,Sonar的这个警告是错误的吗?
  • 是否有任何库使用stringbuilder执行相同的操作?

显然,一些开发人员抱怨这里.

我找到了一种不使用StringBuffer并使用StringBuilder的方法,但我确信这不如使用StringBuffer那样有效(并且可能是一种不好的做法).您可以在junit测试中复制粘贴,此示例代码如下:

    String entry = "Actual 4.11-6 and 13-5";
    String expectedReturn = "Actual 4*11^(-6) and 13^(-5)";

    String number = "(^|\\s)-?\\d+((\\.||,)\\d+){0,1}(.\\d+){0,1}-\\d+";
    Pattern pattern = Pattern.compile(number);
    Matcher matcher = pattern.matcher(entry);

    //USING STRING BUFFER
    StringBuffer stringBuffer = new StringBuffer();
    String substring;
    while(matcher.find()){
        substring = matcher.group(0);
        matcher.appendReplacement(stringBuffer,substring.replace(".","*").replace("-","^(-")+")");
    }
    matcher.appendTail(stringBuffer);

    //USING STRING BUILDER
    matcher = pattern.matcher(entry);
    int lastIndex = 0;
    StringBuilder stringBuilder = new StringBuilder();
    while(matcher.find()){
        stringBuilder.append(entry.substring(lastIndex,matcher.start()));
        substring = matcher.group(0);
        stringBuilder.append(substring.replace(".","*").replace("-","^(-")+")");
        lastIndex = matcher.end(); …
Run Code Online (Sandbox Code Playgroud)

java stringbuilder append stringbuffer sonarqube

1
推荐指数
1
解决办法
1689
查看次数

为什么StringBuffer类使用Array作为底层数据结构而不是LinkedList?

Java中的StringBuffer/ StringBuilderclasses主要用于修改String值,而不必每次都初始化一个新的String对象.

是否有一个特定的原因,它不使用一个LinkedListChar数组作为它的底层数据结构?

将char插入到Array中将始终导致O(n)时间将所有元素复制到下一个索引,而在o(1)时间内将其复制到a LinkedList.

java arrays stringbuilder linked-list stringbuffer

1
推荐指数
1
解决办法
93
查看次数