【问题标题】:How to remove repeated substrings from a string? [closed]如何从字符串中删除重复的子字符串? [关闭]
【发布时间】:2019-10-15 05:12:53
【问题描述】:

如何从 C# 中的字符串中删除任何重复的子字符串?例如,在这个字符串中:

This is a test test string

重复的“测试”将被删除以创建结果:

This is a test string

或者在

shift+shift+shift+shift+d

“shift+shift+shift+”将被删除,导致

shift+d

【问题讨论】:

  • 听起来很危险:en.wikipedia.org/wiki/…
  • "This is a test test string" 不是is 也是一个重复的字符串???这些字符串必须以某种方式清楚地分开吗?
  • @HansPassant:谢谢。我现在头疼。
  • @RobertHarvey:这似乎没有完全指定,但它看起来不像 [stackoverflow.com/q/9424379](stackoverflow.com/q/9424379) 的副本。这个问题要求删除重复的子字符串(“abcabc xx abcabc”->“abc x abc”),而另一个问题要求删除重复的单词(“abcabc xx abcabc”->“abcabc xx”)。另一个问题中的解决方案(split().distinct().join())不适用于这个问题。

标签: c# string


【解决方案1】:

我希望通过你的问题本身通过改变句子重复单词被删除并且单词重复字符被删除。

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp
{
    internal class Program
    {
        private static void Main()
        {
            var input = new[] {"This is TEST TEST string", "shift+shift+shift+D"};
            foreach (string data in input)
            {
                bool contains = data.Contains((char)0x20);
                Console.WriteLine(contains ? StripFromSentence(data.TrimEnd(new[] {(char) 0x20})) : StripFromWord(data));
            }
            Console.ReadLine();
        }

        private static string StripFromWord(string word)
        {
            char[] chr = word.ToCharArray();
            var ap = new HashSet<char>();
            foreach (char s in chr)
                ap.Add(s);
            return ap.Aggregate(string.Empty, (current, c) => current + c);
        }

        private static string StripFromSentence(string sentence)
        {
            string[] strings = sentence.Split(new[] {(char) 0x20});
            var ap = new HashSet<string>();
            foreach (string s in strings)
                ap.Add(s);
            return ap.Aggregate(string.Empty, (current, word) => current + (word + (char)0x20));
        }
    }
}

【讨论】:

  • 谢谢,我明天试试
  • 这会将“test”转换为“tes”。
  • 显然,如果它是一个单词,则看不到我有什么评论意味着它会删除单词中的重复字符。其中因为它是句子意味着它将根据相同的大小写(大写和小写)删除重复的单词。
猜你喜欢
  • 2021-03-17
  • 1970-01-01
  • 2018-02-20
  • 2015-02-19
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多