设计一个Java程序,完成:将一个字符串的重复字符进行压缩,只保留一个字符。。 如:原串是:"aaabbcddd112233((55))",压缩后结果是:"abcd123(5)" 建议使用字符串的replaceAll()来完成,代码十分简洁且高效。 输入界面: 请输入字符串: "aaabbcddd112233((55)) 输出界面: 压缩结果是:abcd123(5)
时间: 2024-02-17 21:03:29 浏览: 6
好的,以下是Java代码实现该功能:
```java
import java.util.Scanner;
public class CompressDuplicateChars {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String input = scanner.nextLine();
String result = compressDuplicateChars(input);
System.out.println("压缩后的字符串为:" + result);
}
public static String compressDuplicateChars(String input) {
return input.replaceAll("(.)\\1+", "$1");
}
}
```
代码思路:
1. 从命令行输入一个字符串。
2. 使用 `String.replaceAll()` 方法,将连续重复的字符替换为一个字符。
3. 返回替换后的字符串。
具体地说,我们使用的正则表达式 `(.)\\1+` 匹配连续重复的字符,并使用 `$1` 将其替换为一个字符。其中,`(.)` 表示任意字符,`\\1+` 表示与第一个捕获组相同的一个或多个字符。
相关问题
给我一个用SHA-256将字符串压缩到128位的代码java预研
以下是一个用Java实现SHA-256压缩字符串到128位的代码:
```java
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHA256Example {
public static void main(String[] args) throws NoSuchAlgorithmException {
String input = "example";
byte[] hash = getSHA256(input);
String hexHash = bytesToHex(hash);
System.out.println(hexHash);
}
public static byte[] getSHA256(String input) throws NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
return digest.digest(input.getBytes(StandardCharsets.UTF_8));
}
public static String bytesToHex(byte[] bytes) {
StringBuilder hexString = new StringBuilder();
for (byte b : bytes) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
return hexString.toString().substring(0, 32); // 只取前128位
}
}
```
这个代码使用Java的MessageDigest类来计算SHA-256哈希值,并使用bytesToHex方法将哈希值转换为16进制字符串。在这个例子中,输入字符串是"example",输出的哈希值应该是"3f9f6b4cb0f528ff3a8f347d4c9d6bc7",这是一个128位的SHA-256哈希值。
Java使用replaceAll函数完成字符串重复字符的压缩
可以使用replaceAll函数和正则表达式来完成字符串重复字符的压缩,具体的代码如下:
```java
public static String compressString(String str) {
return str.replaceAll("(.)\\1+", "$1");
}
```
这里的正则表达式 "(.)\\1+" 表示匹配至少两个重复的字符,其中的 "(.)" 表示匹配任意一个字符并将其捕获到第一个组中,"\\1" 表示反向引用第一个组中的内容,加上"+"表示匹配至少两个重复的字符。在替换时,使用"$1"表示把第一个组中捕获的字符替换回去,从而实现压缩字符串的效果。