用于替换java中出现两次或多次的字符的正则表达式

问题描述 投票:0回答:1

我正在网上做练习,遇到一个问题,要求我删除字符串中出现两次或多次的所有字符。

例如:

String s2 = "racecar"; 

将变成“e”,并且

String s3 = "aabbccc"; 

会变成“”,并且

String s4 = "Hello world";

会变成“He wrd”

我知道还有其他解决方案,但我想知道是否有正则表达式。

我尝试了一些不同的事情:

s = s.replaceAll(".{2,}", "");
s = s.replaceAll("[a-z]{2,}", "");

还有其他一些,但似乎全部都替换了整个字符串,而我只想替换所有出现多次的字符。

那么,有正则表达式吗?

java regex string char
1个回答
0
投票

为什么使用正则表达式?它不是正则表达式的用例。使用这个:

import java.util.*;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        String s1 = "racecar"; 
        String s2 = "aabbccc"; 
        String s3 = "Hello world";

        System.out.println(removeRepeatingChars(s1)); // Output: "e"
        System.out.println(removeRepeatingChars(s2)); // Output: ""
        System.out.println(removeRepeatingChars(s3)); // Output: "He wrd"
    }

    public static String removeRepeatingChars(String input) {
        // Count occurrences of each character
        Map<Character, Long> charCount = input.chars()
                .filter(ch -> !Character.isWhitespace(ch)) // Optional: ignore whitespace if needed
                .mapToObj(c -> (char) c)
                .collect(Collectors.groupingBy(c -> c, LinkedHashMap::new, Collectors.counting()));

        // Build a regex pattern for characters occurring 2 or more times
        String repeatingChars = charCount.entrySet().stream()
                .filter(entry -> entry.getValue() >= 2)
                .map(entry -> Pattern.quote(String.valueOf(entry.getKey())))
                .collect(Collectors.joining("|"));

        // If there are no repeating characters, return the input as-is
        if (repeatingChars.isEmpty()) {
            return input;
        }

        // Replace all repeating characters with an empty string
        return input.replaceAll(repeatingChars, "");
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.