C#字符串拆分

5

我有一个字符串 = "google.com 220美元 3d 19h"。

我想提取".com"部分......

如何最简单地使用split字符串方法来获得此结果?


11
提取字符串 ".com" 是最简单的方法,而且你甚至不需要使用 string.split! :-) - Paul Sonier
1
没有足够的细节 - 如果您提供更多字符串示例以及需要提取的内容,就可以设计出一个好的通用解决方案。 - Oded
考虑使用正则表达式。 - Jay Riggs
4
@Jay Riggs - 现在你有两个问题。 - Matthew Jones
@Matthew - 我不知道你的意思是什么... - Jay Riggs
1
@Jay Riggs - 来自Jamie Zawinski的名言,看看这个链接:http://www.codinghorror.com/blog/archives/001016.html - Matthew Jones
8个回答

8

我猜您要么想提取域名,要么想提取字符串中的TLD部分。以下代码可以完成这个任务:

var str = "google.com 220 USD 3d 19h";
var domain = str.Split(' ')[0];           // google.com
var tld = domain.Substring(domain.IndexOf('.')) // .com

不确定为什么这个被投票了,tld代码是错误的。我猜你的意思是:var tld = domain.Substring(domain.IndexOf('.')); // .com - D'Arcy Rittich
我假设 var tld = domain.Substring(domain.IndexOf('.')) 的意思是(我编辑了它;希望你不介意 Noldorin)? - Fredrik Mörk
@OrbMan:你是一个非常苛刻的评判者!这显然只是一个打字错误,你本可以自己修复它。我猜那个踩的人是你。: P - Noldorin
@Fredrik:谢谢。是的,在明显的错误时,随时都可以指出(在这种情况下是因为匆忙打字)。 :) - Noldorin
1
@Noldorin - 或许我不知道这里的协议,我以为错误答案应该被投反对票,而且我以前从没编辑过答案,我倾向于告诉人们并等待他们修复。投票恢复。 - D'Arcy Rittich
@OrbMan:通常来说,那些推荐错误方法或包含不正确理论/解释的答案可能会被投票否决。同样地,那些包含大量无意义代码的答案也是如此。相对较小的代码错误(可能是意外的)应该指出给发帖者或修复,而不需要进行任何投票。希望这样说得清楚。无论如何,感谢您的恢复。 - Noldorin

3
替代想法
string str = "google.com 220 USD 3d 19h";
string match = ".com";
string dotcomportion = str.Substring(str.IndexOf(match), match.Length);

只有在顶级域名是.com的情况下才有效。考虑到实际上要找出TLD是什么,这似乎很奇怪。 - Brian
@Brian:虽然我同意代码不是正确的解决方案,但它确实可以挑选出任何三个字母的顶级域名(例如.net或.org)。但它会错过其他任何顶级域名(例如.de或.info)。 - Fredrik Mörk

1

假设您想要顶级域名:

string str = "google.com 220 USD 3d 19h";
string tld = str.Substring(str.LastIndexOf('.')).Split(' ')[0];
Console.WriteLine(tld);

输出:

.com

这将考虑子域名。


1
我知道你问的是使用 Split 方法,但我不确定这是否是最佳方法。拆分字符串将分配至少 5 个立即被忽略并且必须等到 GC 释放的新字符串。最好直接使用索引进入字符串,只提取所需内容。
string str =  "google.com 220 USD 3d 19h";
int ix = str.IndexOf( ' ' );
int ix2 = str.IndexOf( '.', 0, ix );
string tld = str.Substring( ix2, ix - ix2 );
string domain = str.Substring( 0, ix );

1

如果你可以假设空格是分隔符,那么这就很容易了

string full

char[] delimiterChars = { ' ' }; // 用于指定更多的分隔符 string[] words = full.Split(delimiterChars, 1); // 只使用一个空格来分割单词

string result = words[0] // 这是如何访问它的方法


1
如果您的意思是删除,您可以使用Replace方法。
变量结果 = str.Replace(“.com”,“”);

0

使用正则表达式是最好的选择,但如果您想使用Split,则

  var str = "google.com 220 USD 3d 19h";
        var str1  = str.Split(' ')[0];
        var str2 = str1.Split('.')[0];
        Console.WriteLine(str1.Replace(str2, string.Empty));

0

我无法想象在世界上有任何理由想要使用 String.Split 来实现这个目的。 这个问题最好用正则表达式解决。

这里有一个小程序演示如何做到:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        String foo = "google.com 220 USD 3d 19h";
        Regex regex = new Regex(@"(.com)", RegexOptions.IgnoreCase);
        Match match = regex.Match(foo);

        if (match.Success)
            Console.WriteLine(match.Groups[1].Value);
    }
}

下投票者 - 除了我没有使用String.Split之外,是否有其他原因导致这个被投票为负? - Andrew Hare
我没有给你的帖子点踩,但是你的语气可能与此有关。仅仅因为你想不出原因并不意味着不存在原因。 - Jeff Yates
嗯,说得好 - 我听起来有点像个混蛋 :) 谢谢你指出来。 - Andrew Hare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接