本文为《Java Coding Problems》21-30题,问题涉及String, Number和Math (共39题)。
问题:移除字符串的首尾空白字符。
思路:使用trim
方法。
代码如下:
public static String trim(String str) {
return str.trim();
}
trim
不支持Unicode的一些空白字符,比如\u2002
。在JDK 11
中提供了strip
方法支持Unicode。修改代码如下:
public static String trim(String str) {
return str.strip();
}
问题:查找字符串数组的最长公共前缀。
思路:依序对每个字符串查找最长公共前缀。
代码如下:
// 查找两个字符串的最长公共前缀
public static String longestPrefix(String str1, String str2) {
int minLen = Math.min(str1.length(), str2.length());
OptionalInt idx = IntStream.range(0, minLen + 1)
.filter(i -> minLen == i
|| str1.charAt(i) != str2.charAt(i))
.findFirst();
if (idx.isPresent()) {
return str1.substring(0, idx.getAsInt());
}
return str1;
}
public static String longestPrefix(String[] strs) {
// 使用reduce对所有字符串进行查找
return Arrays.stream(strs)
.reduce((str1, str2) -> longestPrefix(str1, str2))
.orElse(null);
}
问题:如何给文本(包括多行文本)加缩进。
思路:JDK 12
支持String.indent
方法,可以给字符串加缩进,如果是多行字符串,会给每一行都加缩进。
问题:将字符串转化成另一个字符串。
思路:JDK 8
可以使用Stream
,JDK 12
可以使用transform
方法。
代码如下:
public static transform(String str) {
// JDK 8
return Stream.of(str).map(String::toUpperCase);
// JDK 12
return str.transform(String::toUpperCase);
}
问题:返回两个数中的最大值和最小值。
思路:使用Math.min
和Math.max
,JDK 8
中每个数类有自己的min
和max
,如Integer.min
和Integer.max
。也可使用BinaryOperator.minBy
和BinaryOperator.maxBy
。
问题:求和两个大整数,并在溢出时抛出ArithmeticException
异常。
思路:使用Math.addExact
方法,它会在溢出时抛出异常。
代码如下:
public static int add(int a, int b) {
return Math.addExact(a, b);
// Math.subtractExact(a, b);
// Math.multiplyExact(a, b);
}
问题:将字符串转化成特定进制的无符号数。
思路:使用Integer.parseUnsignedInt
方法。
代码如下:
public static int parseUInt(String str) {
// 将字符串转成10进制的无符号整数
return Integer.parseUnsignedInt(str, 10);
}
问题:将int数转换成无符号的long。
思路:使用Integer.toUnsignedLong
方法。
代码如下:
public static long toULong(int val) {
return Integer.toUnsignedLong(val);
}
问题:将两个int数作为无符号数比较。
思路:使用Integer.compareUnsigned
方法。
问题:将两个int数作为无符号数进行除法和求余。
思路:使用Integer.divideUnsigned
进行除法,使用Integer.remainderUnsigned
进行求余。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。