
本文为《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 删除。