相关疑难解决方法(0)

在java中重复String的简单方法

我正在寻找一个简单的公共方法或运算符,它允许我重复一些字符串n次.我知道我可以使用for循环来编写它,但我希望在必要时避免使用循环,并且某处应该存在一个简单的直接方法.

String str = "abc";
String repeated = str.repeat(3);

repeated.equals("abcabcabc");
Run Code Online (Sandbox Code Playgroud)

相关:

repeat string javascript 通过重复给定次数的另一个字符串来创建NSString

编辑

当他们不是完全必要的时候我试着避免循环,因为:

  1. 即使它们隐藏在另一个函数中,它们也会增加代码行数.

  2. 读我的代码的人必须弄清楚我在循环中做了什么.即使它被评论并且具有有意义的变量名称,它们仍然必须确保它没有做任何"聪明"的事情.

  3. 程序员喜欢把聪明的东西放在for循环中,即使我把它写成"只做它想要做的事情",这并不排除有人出现并增加一些额外的聪明"修复".

  4. 他们经常容易出错.对于涉及索引的循环,往往会产生一个错误.

  5. For循环经常重用相同的变量,增加了很难找到范围错误的机会.

  6. For循环增加了bug猎人必须看的地方数量.

java string

543
推荐指数
18
解决办法
45万
查看次数

在Java中将前导零添加到数字?

有没有更好的方法来获得这个结果?如果num的位数多于数字,则此函数失败,我觉得它应该在某个库中(如Integer.toString(x,"%3d")或其他东西)

static String intToString(int num, int digits) {
    StringBuffer s = new StringBuffer(digits);
    int zeroes = digits - (int) (Math.log(num) / Math.log(10)) - 1; 
    for (int i = 0; i < zeroes; i++) {
        s.append(0);
    }
    return s.append(num).toString();
}
Run Code Online (Sandbox Code Playgroud)

java

453
推荐指数
4
解决办法
46万
查看次数

左边填充一个带零的字符串

我在这里这里看过类似的问题.

但是我没有得到如何用Zero填充String.

输入:"129018"输出:"0000129018"

总输出长度应为TEN.

java string padding

240
推荐指数
11
解决办法
40万
查看次数

如何在java中获得整数的0填充二进制表示?

例如,1, 2, 128, 256输出可以是(16位):

0000000000000001
0000000000000010
0000000010000000
0000000100000000
Run Code Online (Sandbox Code Playgroud)

我试过了

String.format("%16s", Integer.toBinaryString(1));
Run Code Online (Sandbox Code Playgroud)

它为左边填充放置空格:

`               1'
Run Code Online (Sandbox Code Playgroud)

如何将0s用于填充.我在Formatter中找不到它.还有另一种方法吗?

提前致谢.

PS 这篇文章描述了如何使用左0填充格式化整数,但它不适用于二进制表示.

java binary string-formatting

113
推荐指数
7
解决办法
12万
查看次数

获取LocalDate的周数(Java 8)

我正在尝试使用以下格式获取完整LocalDate的周数:

dd.MM.yyy
Run Code Online (Sandbox Code Playgroud)

我还没有在Java 8 Date API中找到一个返回Week Number的函数,我试图创建一个算法,但它没有用.

java week-number java-8

28
推荐指数
2
解决办法
3万
查看次数

右边有零填充

对不起,如果这个问题已经提出,我已经深入搜索,没有任何内容.

现在,我知道:

String.format("%05d", price);
Run Code Online (Sandbox Code Playgroud)

将左边的零填充我的价格,因此25的价格将导致00025

如果我想将它们填充到右边怎么办,结果是25000?如何 使用String.format模式执行此操作?

java padding string-formatting

23
推荐指数
2
解决办法
4万
查看次数

DecimalFormat.format()的更快替代方案?

为了提高性能,我使用VisualVM采样器分析了我的一个应用程序,使用的最小采样周期为20ms.根据分析器,主线程在该DecimalFormat.format()方法中花费了近四分之一的CPU时间.

我使用DecimalFormat.format()0.000000模式"转换" double数字为字符串表示与正好六个小数位数.我知道这种方法相对昂贵并且称为很多次,但我仍然对这些结果感到有些惊讶.

  1. 这种采样分析仪的结果在多大程度上准确?我将如何验证它们 - 最好不要求助于仪器分析仪?

  2. DecimalFormat对于我的用例,有更快的替代方案吗?推出自己的NumberFormat子类是否有意义?

更新:

我创建了一个微基准来比较以下三种方法的性能:

  • DecimalFormat.format():单个DecimalFormat对象重复使用多次.

  • String.format():多个独立呼叫.在内部,这种方法归结为

    public static String format(String format, Object ... args) {
        return new Formatter().format(format, args).toString();
    }
    
    Run Code Online (Sandbox Code Playgroud)

    因此我预计它的表现非常相似Formatter.format().

  • Formatter.format():单个Formatter对象重复使用多次.

    此方法稍微不方便 - Formatter使用默认构造函数创建的对象将format()方法创建的所有字符串附加到内部StringBuilder对象,该内部对象无法正确访问,因此无法清除.因此,多次调用format()将创建所有结果字符串的串联.

    为了解决这个问题,我提供了我自己的StringBuilder实例,我在使用之前清除了一个setLength(0)调用.

有趣的结果:

  • DecimalFormat.format() 是每次通话1.4us的基线.
  • String.format() 在每次通话2.7便士时慢了两倍.
  • Formatter.format() 在每次通话2.5us时,也慢了两倍.

现在它看起来DecimalFormat.format()仍然是这些替代品中最快的.

java performance profiling string-formatting

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

如何在Java中向左边的数字添加左边填充的零?

我有一个整数100,我如何格式化它00000100(总是8位数)?

java string-formatting

14
推荐指数
2
解决办法
2万
查看次数

在Java中使用零填充左填充整数(非小数格式)

已经回答了以十进制格式打印的整数的问题,但我正在寻找一种优雅的方法来对非十进制格式的整数(如二进制,八进制,十六进制)执行相同的操作.

创建这样的字符串很容易:

String intAsString = Integer.toString(12345, 8);
Run Code Online (Sandbox Code Playgroud)

将创建一个具有整数值12345的八进制表示的字符串.但是如何格式化它以使字符串具有10个数字,除了计算所需的零的数量和手动组装新的字符串.

一个典型的用例是创建具有固定位数(如16,32,...)的二进制数,其中一个人想要包含前导零的所有数字.

java

14
推荐指数
3
解决办法
2万
查看次数

如何在Java(Android)中使用getMonth添加Leading Zero

我正在使用一个int变量:

month = dp.getMonth() + 1;
Run Code Online (Sandbox Code Playgroud)

目前获得"2"的输出,当我执行以下操作时:

if (month<10){
                month = '0'+month;
            };
Run Code Online (Sandbox Code Playgroud)

我明白了:50.

java android date getdate

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