diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/text/CharSequenceUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/text/CharSequenceUtil.java index 9f8850540..15e4ac29a 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/text/CharSequenceUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/text/CharSequenceUtil.java @@ -15,8 +15,8 @@ package org.dromara.hutool.core.text; import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.collection.CollUtil; import org.dromara.hutool.core.comparator.VersionComparator; -import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.func.SerFunction; +import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.math.NumberUtil; import org.dromara.hutool.core.regex.ReUtil; import org.dromara.hutool.core.text.finder.CharFinder; @@ -3304,6 +3304,72 @@ public class CharSequenceUtil extends StrValidator { return preString + upperFirst(str); } + /** + * 方法注释:
+ * 〈大写对应下标字母〉 + * + *
例如: str = name,index = 1, return nAme
+ * + *

搜索关键字:

+ * 大写 + * 大写下标 + * 大写字母 + * 大小写 + * + * @param str 字符串 + * @param index 下标 + * @return java.lang.String 字符串 + */ + public static String upperIndex(final CharSequence str, final int index) { + + if (str == null) { + return null; + } + + if (str.length() > 0) { + final char charredAt = str.charAt(index); + if (Character.isLowerCase(charredAt)) { + return subPre(str, index) + Character.toUpperCase(charredAt) + subSuf(str, index + 1); + } + } + + return str.toString(); + + } + + /** + * 方法注释:
+ * 〈小写对应下标字母〉 + * + *
例如: str = NAME,index = 1, return NaME
+ * + *

搜索关键字:

+ * 小写 + * 小写下标 + * 小写字母 + * 大小写 + * + * @param str 字符串 + * @param index 下标 + * @return java.lang.String 字符串 + */ + public static String lowerIndex(final CharSequence str, final int index) { + + if (str == null) { + return null; + } + + if (str.length() > 0) { + final char charredAt = str.charAt(index); + if (Character.isUpperCase(charredAt)) { + return subPre(str, index) + Character.toLowerCase(charredAt) + subSuf(str, index + 1); + } + } + + return str.toString(); + + } + /** * 大写首字母
* 例如:str = name, return Name @@ -3312,16 +3378,7 @@ public class CharSequenceUtil extends StrValidator { * @return 字符串 */ public static String upperFirst(final CharSequence str) { - if (null == str) { - return null; - } - if (str.length() > 0) { - final char firstChar = str.charAt(0); - if (Character.isLowerCase(firstChar)) { - return Character.toUpperCase(firstChar) + subSuf(str, 1); - } - } - return str.toString(); + return upperIndex(str, 0); } /** @@ -3332,16 +3389,7 @@ public class CharSequenceUtil extends StrValidator { * @return 字符串 */ public static String lowerFirst(final CharSequence str) { - if (null == str) { - return null; - } - if (str.length() > 0) { - final char firstChar = str.charAt(0); - if (Character.isUpperCase(firstChar)) { - return Character.toLowerCase(firstChar) + subSuf(str, 1); - } - } - return str.toString(); + return lowerIndex(str, 0); } // endregion diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/text/CharSequenceUtilTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/text/CharSequenceUtilTest.java index cd4755223..03b920dc8 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/text/CharSequenceUtilTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/text/CharSequenceUtilTest.java @@ -335,4 +335,34 @@ public class CharSequenceUtilTest { Assertions.assertEquals("This is En", ret); } + + @Test + public void upperIndexTest() { + + final StringBuilder sb = new StringBuilder("key"); + + final String s1 = CharSequenceUtil.upperIndex(sb, 0); + Assertions.assertEquals("Key", s1); + + final String s2 = CharSequenceUtil.upperIndex(sb, 1); + Assertions.assertEquals("kEy", s2); + + final String s3 = CharSequenceUtil.upperIndex(sb, 2); + Assertions.assertEquals("keY", s3); + + } + + @Test + public void lowerIndexTest() { + final StringBuilder sb = new StringBuilder("KEY"); + + final String s1 = CharSequenceUtil.lowerIndex(sb, 0); + Assertions.assertEquals("kEY", s1); + + final String s2 = CharSequenceUtil.lowerIndex(sb, 1); + Assertions.assertEquals("KeY", s2); + + final String s3 = CharSequenceUtil.lowerIndex(sb, 2); + Assertions.assertEquals("KEy", s3); + } }