2015-04-03 66 views
1

我有一个字符串getallairlinedetails。在指定的字符串之间没有空格或分隔符。我如何分割这样的字符串:“获取所有航空公司的详细信息”如何拆分C#中指定字符串的单词?

+3

我没有看到任何模式来分割它。 – 2015-04-03 08:36:18

+0

是否有任何可能的方式,我可以从这个字符串像航空公司得到的话或得到 – 2015-04-03 08:40:11

+0

无论如何看看'String.Split'重载或其他'字符串'方法.. – 2015-04-03 08:41:48

回答

0

这是不可能的。 Split方法至少需要一个字符,比如空格,以便分割字符串。否则,没有任何标准将字符串拆分为一组子字符串。

在尝试选择类型的方法来解决问题之前,请考虑问题。你会如何分割这个字符串?你的算法是什么?

想想后者,很快你会意识到你根本无法分裂它,因为你没有任何可以依赖的东西。

例如,你的情况,如果字符串是这样的:

"get_all_airline_details" 

它会一直明确表示,所有的话都彼此分开了_。因此,从左到右,您会在第一个_处找到第一个单词的结尾。然后,第二个单词将在此_之后开始,并将在第二个_等结束,等等。

当然这被认为你会发现当你会注意到这个字符串。如果你想在C#中分割它,你可以使用字符串的分割方法传递这个字符_。然而,上述的结论是,我们应该先找到一个“模式”,然后尝试分割字符串。那么你将使用哪种语言来做到这一点,这并不重要。

+0

它似乎是一个评论 – 2015-04-03 08:37:18

+2

@SaiKalyanKumarAkshinthala这是我的第一个想法。但是,我再次想到了这一点,我意识到这是唯一可以解决这个问题的答案。 – Christos 2015-04-03 08:38:35

+0

有没有什么办法可以从这个字符串中得到这样的单词:get – 2015-04-03 08:39:05

4

由于这里没有明显的拆分模式,因此没有可靠的方式供您使用。

但是,如果您的单词溢出不是很大 - 您可以尝试创建一些字典,然后使用该字典进行分割。

你可以尝试从字典

word_from_dictionary => " " + word_from_dictionary + " " 

和拆分使用空间作为分隔符由String.Split得到的字符串在字符串中的每个字代替。

例如,让你的字典包含单词“get”,“all”和“details”。

然后,通过替换字典中的所有单词,您将获得get all airline details - 这可以被拆分。

当然,这不是一个非常可靠的方式,因为它取决于你需要以某种方式填充字典。

+0

另外,如果字典同时包含“航空公司”和“空中”,那么你不想拆分“航空公司”。 – 2015-04-03 08:57:51

+0

@HansKesting当然。其实它暗含在“*它是不是非常可靠的方式,因为它取决于字典*”太...感谢重音这个问题。 – 2015-04-03 09:00:35

+0

鉴于一般来说这是一个坏主意,我不确定使用“Contains”作为你的建议是一个好主意,而不是试图从左到右查找单词,并在你找不到一个单词时停止。显然这样你就需要一个完整的字典,而不是像你所建议的那样是一部分字典。因此,考虑到“get all airline”和“getallairlinedetails”这两个词,你开始使用'StartsWith'查找并删除找到的单词。 – xanatos 2015-04-03 10:26:51

1
public static List<string> Dict = new List<string> { "details", "airline", "all", "get" }; 

    static void Main(string[] args) 
    { 
     String s = "getallairlinedetails"; 

     Console.WriteLine(ReturnSplitString(s)); 

     Console.ReadLine(); 
    } 

    public static string ReturnSplitString(string s) 
    { 
     string[] ww = new string[s.Length]; 

     foreach (string word in Dict) 
     { 
      if (s.Contains(word)) 
      { 
       int ind = s.IndexOf(word); 
       ww[ind] = word; 
      } 
     } 

     string sf = ""; 

     foreach (string sr in ww) 
     { 
      if (sr != null) 
       sf += sr + " "; 
     } 

     return sf.TrimEnd(' '); 
    } 

这样的事情将是你唯一的选择,遍历包含个别字的字典,由他们在字符串中的位置将它们存储,然后再加入数组了在年底才能。

该代码正确返回的方式,只是改变s并添加任何单词到字典将返回不同的单词。

没有办法做到这一点,至少没有知道你在寻找什么,虽然是问题。