(java 1.5)
我需要在片段中构建一个String.我给了一组(子)字符串,每个字符串都有一个起点和终点,它们属于最后一个字符串.想知道是否有一些规范的做法.这不是家庭作业,我可以使用任何可授权的OSS,例如jakarta commons-lang StringUtils等.
我的公司有一个使用CharBuffer的解决方案,我很满意保留它(并添加一些单元测试,其中没有(?!))但代码相当可怕,我想要更容易阅读的东西.
正如我所说,这不是功课,我不需要一个完整的解决方案,只需要一些指向库或java类的指针,这可能会给我一些见解.String.Format看起来并不正确......
我必须尊重输入太长和太短等.子字符串将按它们出现的顺序重叠(如果重叠).
作为输入的一个例子,我可能有类似的东西:
字符串:开始:结束
FO:0:3(字符串短于字段)
BAR:4:5(字符串大于字段)
BLEH:5:9(字符串覆盖前一个字段)
我想结束
FO BBLEH
01234567890
Run Code Online (Sandbox Code Playgroud)
(编辑:对所有人 - StringBuilder(具体来说,"预分配到已知长度,然后使用.replace()"主题)似乎是我在想的.感谢所有建议的人!)
我知道StringBuffer和之间的技术差异StringBuilder.
但如果我半年左右不使用它们,我只会忘记哪一个是同步的,哪一个不同步.我总是查找JavaDoc的第一句话.
那么:是否有某种容易记住的助记符来区分它们?如何你还记得有什么区别?
我在Java书中读过:
因为a
String是不可变的,使用StringBuffer效率更高.
我知道String实例是不可变的.
我也明白,StringBuffer使处理字符串比正常情况更有效.
但是我无法解决的问题是连接这两个概念的原因,即String不可变的帮助是StringBuffer什么?
谢谢 :)
现在我正在开发一个关于Java的简单项目.我在String Builder中附加并在控制台上打印字符串.当我尝试将字符串数组追加到字符串生成器中时,它会在控制台上打印对象而不是字符串数组.告诉我的尝试是对还是错.
Intellij Idea提供更换以下内容:
StringBuffer sb = new StringBuffer();
sb.append("Name=").append(name).append(", name2=").append(name2).append(", list=").append(list);
return sb.toString();
Run Code Online (Sandbox Code Playgroud)
至:
return "name=" + name + ", name2=" + name2 + ", list=" + list;
Run Code Online (Sandbox Code Playgroud)
据我所知,它不太有效(可变/不可变).那么,更好的是什么?
String和(StringBuilder或StringBuffer)之间存在许多差异,例如可变性和许多字符串操作
可能这个问题看起来有点傻,但我想知道编程范式.
我想问一下,为什么Java实现了另一个类,StringBuilder或者StringBuffer像数据结构那样String.为什么他们自己没有给出这些功能String.
为什么不把String本身线程安全的,或提供一些额外的功能StringBuilder或StringBuffer有?
我正在学习算法实现课程.我的老师提到了StringBuffer和StringBuilder,他说StringBuffer比StringBuilder更安全,因为在线程方面.真的吗?如果是这样,那意味着什么?我查了一下这个问题,很多答案都提到了同步.任何人都可以解释这意味着什么,以及如何使StringBuffer比StringBuilder更安全?
我在Java中有以下代码.
String foo = " ";
Run Code Online (Sandbox Code Playgroud)
方法1:
StringBuffer buf = new StringBuffer();
buf.append("Hello");
buf.append(foo);
buf.append("World");
Run Code Online (Sandbox Code Playgroud)
方法2:
StringBuffer buf = new StringBuffer();
buf.append("Hello").append(foo).append("World");
Run Code Online (Sandbox Code Playgroud)
有人可以启发我,方法2如何才能提高代码的性能?
https://pmd.github.io/pmd-5.4.2/pmd-java/rules/java/strings.html#ConsecutiveAppendsShouldReuse
下面是一个代码,如果我遇到数组(arr)中的字母O,那么我必须用"."替换相同的数组索引(newArr).连同其相邻索引,即索引(i,j),(i + - 1,j)和(i,j + - 1)需要用"."替换.
考虑数组(arr)的这个输入:
6 7
.......
...O...
.......
.......
.......
.......
Run Code Online (Sandbox Code Playgroud)
我应该使用数组(newArr)得到什么输出:
OOO.OOO
OO...OO
OOO.OOO
OOOOOOO
OOOOOOO
OOOOOOO
Run Code Online (Sandbox Code Playgroud)
我得到的输出:
OO...OO
OO...OO
OO...OO
OO...OO
OO...OO
OO...OO
Run Code Online (Sandbox Code Playgroud)
PS:我知道角落的情况,如果我们在索引中得到一个O,将导致ArrayIndexOutOfBound异常.请考虑上面的例子.
import java.util.*;
public class Pattern{
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
int R= sc.nextInt(); // Takes input for Rows
int C= sc.nextInt(); // Takes input for Coloumn
StringBuffer[] arr= new StringBuffer[R]; // Array of type StringBuffer to which input is given.
StringBuffer[] newArr= new StringBuffer[R]; // …Run Code Online (Sandbox Code Playgroud) java ×10
stringbuffer ×10
string ×4
arrays ×2
algorithm ×1
immutability ×1
performance ×1
pmd ×1
replace ×1
synchronized ×1