给定特定的开始和结束位置,构建String的好方法是什么? - java

(java 1.5)

我需要构建一个成块的字符串。我得到了一组(子)字符串,每个字符串都有它们在最终字符串中所处位置的起点和终点。想知道是否有一些规范的方法可以做到这一点。这不是家庭作业,我可以使用任何可许可的OSS,例如jakarta commons-lang StringUtils等。

我公司有一个使用CharBuffer的解决方案,我很乐意按原样保留它(并添加一些单元测试,其中没有(?!)),但是代码相当丑陋,我希望某些内容易于阅读。

就像我说的那样,这不是家庭作业,并且我不需要完整的解决方案,只需一些指向库或Java类的指针,这可能会给我一些启示。 String.Format似乎不太正确...

我将不得不接受太长和太短的输入,等等。子字符串将按照它们出现的顺序被覆盖(在重叠的情况下)。

作为输入的示例,我可能会有类似的内容:

字符串:开始:结束

FO:0:3(字符串比字段短)

BAR:4:5(字符串大于字段)

BLEH:5:9(字符串覆盖上一个字段)

我想结束

FO  BBLEH  
01234567890

(编辑:所有人-StringBuilder(特别是“将预分配到已知长度,然后使用.replace()”主题)似乎是我在想的。感谢所有提出建议的人!)

参考方案

StringBuilder output = new StringBuilder();
// for each input element
{
    while (output.length() < start)
    {
        output.append(' ');
    }
    output.replace(start, end, string);
}

您还可以在插入任何字符串之前确定output的最终大小。您可以首先通过输入元素来找到最大的末端。这将是output的最终大小。

char[] spaces = new char[size];
Arrays.fill(spaces, ' ');
output.append(spaces);

Java:找到特定字符并获取子字符串 - java

我有一个字符串4.9.14_05_29_16_21,我只需要获取4.9。数字各不相同,所以我不能简单地获得此char数组的前三个元素。我必须找到最正确的.并将其子字符串化直到那里。我来自Python,因此我将展示Python的实现方法。def foobar(some_string): location = some_string.rfind('.&…

Java string.hashcode()提供不同的值 - java

我已经在这个问题上停留了几个小时。我已经注释掉所有代码,认为这与数组超出范围有关,但是这种情况仍在发生。我正在尝试使用扫描仪从文件中读取输入,存储数据并稍后使用哈希码获取该数据。但是哈希值不断变化。public static void main(String[] args) { //only prior code is to access data char…

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…