今天实现一个字符串拼接的一个需求,比如:
输入:
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,这点和我想到的一致
最后总结下,看这些程序确实能提高自己的认知和考虑问题的周到性。
相关推荐
12. **重复生成**:`StringUtils.repeat()` 方法可以生成重复的字符串。 在实际使用 `common-lang3.jar` 时,你可以通过导入 `org.apache.commons.lang3.StringUtils` 类并调用相应的方法来提升字符串处理的效率和...
System.out.println(StringUtils.isEmpty(null)); // 输出 true System.out.println(StringUtils.isEmpty("")); // 输出 true System.out.println(StringUtils.isEmpty(" ")); // 输出 false System.out.println...
System.out.println(StringUtils.isEmpty(null)); // true System.out.println(StringUtils.isEmpty("")); // true System.out.println(StringUtils.isEmpty(" ")); // false System.out.println(StringUtils....
\n\t\f\r") = "" //所有控制字符都被移除 StringUtils.trim("bob") = "bob" StringUtils.trim(" bob ") = "bob" 6. public static String trimToNull(String str) 和 trim() 类似,但结果为 null 时返回 null,而...
7. **删除与填充**:`StringUtils.deleteWhitespace(String str)`可以删除字符串中的所有空白字符,`StringUtils.leftPad(String str, int size, String padStr)`和`StringUtils.rightPad(String str, int size, ...
StringUtils.isEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) { //多次反向代理后会有多个ip值,第一个ip才是真实ip int index = ip.indexOf(","); if (index != -1) { return ip....
9. **重复字符串**:`StringUtils.repeat(String str, int repeat)` 用于创建一个字符串,其中包含指定次数的原始字符串。 10. **子串截取**:`StringUtils.substring(String str, int beginIndex, int endIndex)` ...
StringUtils 字符串工具类,基本上是封装的commons.lang3.StringUtils,有需要的可以下载看下
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包是Java开发中的一个实用工具库,它为处理字符串提供了许多方便的方法。这个库主要由Apache Commons Lang项目提供,这是一个广泛使用的开源组件,旨在补充Java标准库中对于字符串操作的功能不足。...
String repeated = StringUtils.repeat(String str, int repeat); ``` - **示例**: ```java String s = "hello"; System.out.println(StringUtils.leftPad(s, 10, '*')); // "**hello****" ``` #### 14. **...
xwork-core-2.1.6.jar这个版本才内含StringUtils.class这个工具类,我已经将这个类添加到xwork-core-2.3.34.jar内了。
"StringUtils.rar_android_b4a_basic_strings_utilities"这个压缩包,显然专注于介绍B4A中处理字符串的实用工具。在本教程中,我们将深入探讨B4A中的字符串处理函数和技巧,这对于任何想要提高其B4A编程技能的开发者...
StringUtils.cpp
System.out.println(StringUtils.join(new String[]{"Java", "Python", "C++"}, ", ")); // 输出:"Java, Python, C++" System.out.println(StringUtils.substringBefore(str, "!")); // 输出:"Hello, " } } `...
System.out.println("test1 trimToNull: " + StringUtils.trimToNull(test1)); System.out.println("test2 trimToNull: " + StringUtils.trimToNull(test2)); System.out.println("test3 trimToNull: " + ...
System.out.println(StringUtils.isEmpty(null)); // true System.out.println(StringUtils.isEmpty("")); // true System.out.println(StringUtils.isEmpty(" ")); // false System.out.println(StringUtils....
boolean isEmpty = StringUtils.isEmpty(str); // false boolean isBlank = StringUtils.isBlank(str); // true ``` ##### 2. Trim/Strip - **功能**:去除字符串两端的空白字符。 - **用途**:在处理用户输入...
但是,当我们使用StringUtils.isEmpty(page.getQuery())来判断query是否为空时,却出现了问题。问题的关键代码如下: if (StringUtils.isEmpty(page.getQuery())) { // 省略处理逻辑 } 问题的原因是StringUtils....