`

StringUtils.repeat函数赏析与疑问

    博客分类:
  • java
阅读更多
     今天实现一个字符串拼接的一个需求,比如:
      
输入:
 int times = 3;
String str = "abcd";
输出:
abcdabcdabcd
    
   本身想自己用StringBuffer写的,后来稍微查了下,发现org.apache.commons.lang.StringUtils.repeat实现了,稍微看了下它的实现,感觉这个库的作者实现的比我们想象的严禁多了。
    下来我们看下:
   
 public static String repeat(String str, int repeat) {
        // Performance tuned for 2.0 (JDK1.4)

        if (str == null ) {
            return null ;
        }
        if (repeat <= 0) {
            return EMPTY ;
        }
        int inputLength = str.length();
        if (repeat == 1 || inputLength == 0) {
            return str;
        }
        if (inputLength == 1 && repeat <= PAD_LIMIT) {
            return padding(repeat, str.charAt(0));
        }

        int outputLength = inputLength * repeat;
        switch (inputLength) {
            case 1 :
                char ch = str.charAt(0);
                char [] output1 = new char[outputLength];
                for (int i = repeat - 1; i >= 0; i--) {
                    output1[i] = ch;
                }
                return new String(output1);
            case 2 :
                char ch0 = str.charAt(0);
                char ch1 = str.charAt(1);
                char [] output2 = new char[outputLength];
                for (int i = repeat * 2 - 2; i >= 0; i--, i--) {
                    output2[i] = ch0;
                    output2[i + 1] = ch1;
                }
                return new String(output2);
            default :
                StringBuffer buf = new StringBuffer(outputLength);
                for (int i = 0; i < repeat; i++) {
                    buf.append(str);
                }
                return buf.toString();
        }
    }
 
实现的亮点我来稍微总结下
  • 开头的时候就进行了参数的校验,这个里面我个人的感觉,如果repeat为0的时候,应该返回原字符串,为什么要返回empty?
  • 这个里面如果是单个字符repeat的话,会判断repeat次数和PAD_LIMIT的关系,PAD_LIMIT为8192,这个我就有点不大明白
  • 后面就进行了判断,如果是一个字符的话,构建char数组,这个比较好理解
  • 如果是两个字符的话,这个地方少循环了一次,我感觉我写程序的话,这块考虑不到
  • 最后使用StringBuffer,这点和我想到的一致
 
 最后总结下,看这些程序确实能提高自己的认知和考虑问题的周到性。
 
分享到:
评论

相关推荐

    org.apache.commons.lang3.StringUtils.jar.rar

    12. **重复生成**:`StringUtils.repeat()` 方法可以生成重复的字符串。 在实际使用 `common-lang3.jar` 时,你可以通过导入 `org.apache.commons.lang3.StringUtils` 类并调用相应的方法来提升字符串处理的效率和...

    StringUtils

    System.out.println(StringUtils.isEmpty(null)); // 输出 true System.out.println(StringUtils.isEmpty("")); // 输出 true System.out.println(StringUtils.isEmpty(" ")); // 输出 false System.out.println...

    StringUtils函数全集

    System.out.println(StringUtils.isEmpty(null)); // true System.out.println(StringUtils.isEmpty("")); // true System.out.println(StringUtils.isEmpty(" ")); // false System.out.println(StringUtils....

    StringUtils的用法

    \n\t\f\r") = "" //所有控制字符都被移除 StringUtils.trim("bob") = "bob" StringUtils.trim(" bob ") = "bob" 6. public static String trimToNull(String str) 和 trim() 类似,但结果为 null 时返回 null,而...

    commons-lang-StringUtils.zip

    7. **删除与填充**:`StringUtils.deleteWhitespace(String str)`可以删除字符串中的所有空白字符,`StringUtils.leftPad(String str, int size, String padStr)`和`StringUtils.rightPad(String str, int size, ...

    org.apache.commons.lang3.StringUtils.jar

    StringUtils.isEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) { //多次反向代理后会有多个ip值,第一个ip才是真实ip int index = ip.indexOf(","); if (index != -1) { return ip....

    StringUtils(最新)

    9. **重复字符串**:`StringUtils.repeat(String str, int repeat)` 用于创建一个字符串,其中包含指定次数的原始字符串。 10. **子串截取**:`StringUtils.substring(String str, int beginIndex, int endIndex)` ...

    StringUtils.java

    StringUtils 字符串工具类,基本上是封装的commons.lang3.StringUtils,有需要的可以下载看下

    StringUtils.docx

    String trimmedStr1 = StringUtils.trim(str1); System.out.println(trimmedStr1); // 输出 "Hello, World!" String str2 = "\n\t Bob \r\n"; String trimmedStr2 = StringUtils.trim(str2); System.out.println...

    StringUtils jar包

    `StringUtils` jar包是Java开发中的一个实用工具库,它为处理字符串提供了许多方便的方法。这个库主要由Apache Commons Lang项目提供,这是一个广泛使用的开源组件,旨在补充Java标准库中对于字符串操作的功能不足。...

    StringUtils 中文API

    String repeated = StringUtils.repeat(String str, int repeat); ``` - **示例**: ```java String s = "hello"; System.out.println(StringUtils.leftPad(s, 10, '*')); // "**hello****" ``` #### 14. **...

    xwork-core-2.3.34.jar(内含StringUtils.class)

    xwork-core-2.1.6.jar这个版本才内含StringUtils.class这个工具类,我已经将这个类添加到xwork-core-2.3.34.jar内了。

    B4A - StringUtils.rar_android_b4a_basic_strings_utilities

    "StringUtils.rar_android_b4a_basic_strings_utilities"这个压缩包,显然专注于介绍B4A中处理字符串的实用工具。在本教程中,我们将深入探讨B4A中的字符串处理函数和技巧,这对于任何想要提高其B4A编程技能的开发者...

    StringUtils.cpp

    StringUtils.cpp

    StringUtils工具类的使用

    System.out.println(StringUtils.join(new String[]{"Java", "Python", "C++"}, ", ")); // 输出:"Java, Python, C++" System.out.println(StringUtils.substringBefore(str, "!")); // 输出:"Hello, " } } `...

    StringUtils的各项用法

    System.out.println("test1 trimToNull: " + StringUtils.trimToNull(test1)); System.out.println("test2 trimToNull: " + StringUtils.trimToNull(test2)); System.out.println("test3 trimToNull: " + ...

    Java中StringUtils工具类的一些用法实例

    System.out.println(StringUtils.isEmpty(null)); // true System.out.println(StringUtils.isEmpty("")); // true System.out.println(StringUtils.isEmpty(" ")); // false System.out.println(StringUtils....

    StringUtils api 中文 英文 对照

    boolean isEmpty = StringUtils.isEmpty(str); // false boolean isBlank = StringUtils.isBlank(str); // true ``` ##### 2. Trim/Strip - **功能**:去除字符串两端的空白字符。 - **用途**:在处理用户输入...

    详解Spring的StringUtils踩坑记录

    但是,当我们使用StringUtils.isEmpty(page.getQuery())来判断query是否为空时,却出现了问题。问题的关键代码如下: if (StringUtils.isEmpty(page.getQuery())) { // 省略处理逻辑 } 问题的原因是StringUtils....

Global site tag (gtag.js) - Google Analytics