java在中间有空格的字符串中左填充零[重复]

Posted

技术标签:

【中文标题】java在中间有空格的字符串中左填充零[重复]【英文标题】:java left pad zeros in a string with spaces in the middle [duplicate] 【发布时间】:2014-03-16 12:33:13 【问题描述】:

我正在为这个问题在 JSE 1.7.0.52 中寻找多线程进程的性能解决方案:

我有一个字符串,例如:“12697 26”

我需要一个字符串为“00012697 26”

这意味着我不能将 String.formatter 方法用作:

String c = "   12697 26    ";<br />
String.format( "%1$15s", c);<br /><br />

因为结果将与输入相同。 15s 用空格填充左边的字符串,但我需要用零填充....

Java 的新版本中存在一些性能解决方案? 亲切的问候

【问题讨论】:

你为什么需要这个? @EJP 因为我在 oracle 11g 中通过 listagg 生成了很多字符串作为“其他系统中的向量”连接,用于按属性分区的集成,现在我遇到了这个问题。 @Karna 这不是重复的,请仔细阅读问题... 为什么正好有 3 个零? 但是你的例子只有 12 个字符... 【参考方案1】:
String input = "   12697 26    ";
StringBuilder s = new StringBuilder(input);
for (int i = 0  ; i<s.length() && s.charAt(i) == ' ' ; i++) 
    s.setCharAt(i, '0');


System.out.printf("'%s'", s.toString());

'00012697 26'

【讨论】:

尾部字符串上的错误解决方案我不需要尾部零... 已更新以反映您的要求 感谢@MrWiggles,这与我正在使用的解决方案相同。问题是我在输出中管理 1.2gb 的文件,并在连接中管理 6.000.000 条记录......而且这个解决方案很重...... “重”是什么意思。这只是到 StringBuilder 的内存副本,并且将 only 迭代前导空格。您是否进行了任何分析以查看这是否不适合您? 我现在正在寻找使用 awk 我想在发送结果文件之前它的性能更高......人们,非常感谢你的帮助......【参考方案2】:

代码是..

String func(String s)

    int flag=0;
    String temp="":
    for(int i=0;i<s.length();i++)
    
        if(flag==0&&s.charAt(i)==' ')
        temp+="0";
        else
        
            flag=1;
            temp+=s.charAt(i);
         
    
    return temp;
  

【讨论】:

好的,谢谢你我可以单独编写的代码.... 是否存在性能解决方案? “性能解决方案”是什么意思? 性能解决方案是java 1.7.0.51中使用资源较少的解决方案 它是 O(n),其中 n 是字符串的长度,我认为它是最好的时间复杂度之一...... 实际上,由于字符串连接,您的解决方案是 O(n^2)。每当您添加一个字符时,字符串的第一部分就会被复制到一个新的内存区域。使用StringBuilder 会使它变成 O(n)。

以上是关于java在中间有空格的字符串中左填充零[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式替换换行符,如果它们出现超过一次,包括中间有空格的组合

用零填充整数(Java)[重复]

如何在 Python 3 中用前导零填充字符串 [重复]

用零填充字符串的更好方法[重复]

[使用LEFT()函数时包括前导零

用 %20 替换空格 [重复]