30

次のような文字列があります。

"o1 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467"

のみを抽出するにはどうすればよい"o1 1232.5467"ですか?

抽出される文字数は常に同じではありません。したがって、2 番目のスペースが検出されるまでのみ抽出したいと考えています。

4

14 に答える 14

62

直接的なアプローチは次のようになります。

string[] tokens = str.Split(' ');
string retVal = tokens[0] + " " + tokens[1];
于 2010-04-08T12:26:38.603 に答える
25

次のように String.IndexOf を 2 回使用するだけです。

     string str = "My Test String";
     int index = str.IndexOf(' ');
     index = str.IndexOf(' ', index + 1);
     string result = str.Substring(0, index);
于 2010-04-08T12:26:39.640 に答える
12

最初のスペースの位置を取得します。

int space1 = theString.IndexOf(' ');

その後の次のスペースの位置:

int space2 = theString.IndexOf(' ', space1 + 1);

文字列の 2 番目のスペースまでの部分を取得します。

string firstPart = theString.Substring(0, space2);

上記のコードは、ワンライナーにまとめられています。

string firstPart = theString.Substring(0, theString.IndexOf(' ', theString.IndexOf(' ') + 1));
于 2010-04-08T12:27:31.620 に答える
8
s.Substring(0, s.IndexOf(" ", s.IndexOf(" ") + 1))
于 2010-04-08T12:27:48.727 に答える
3

正規表現を使用します: .

Match m = Regex.Match(text, @"(.+? .+?) ");
if (m.Success) {
    do_something_with(m.Groups[1].Value);
}
于 2010-04-08T12:26:16.960 に答える
3

このようなもの:

int i = str.IndexOf(' ');
i = str.IndexOf(' ', i + 1);
return str.Substring(i);
于 2010-04-08T12:28:21.587 に答える
2
string testString = "o1 1232.5467 1232.5467.........";

string secondItem = testString.Split(new char[]{' '}, 3)[1];
于 2010-04-08T12:27:58.967 に答える
1

:P

ここでのアルゴリズムのほとんどは、2 つ以上のスペースが一緒にあるかどうかをチェックしないと思うので、2 番目の単語としてスペースを取得する可能性があります。

それが最善の方法かどうかはわかりませんが、それをリンクするのは少し楽しかったです:P (良いことは、取りたいスペース/単語の数を選択できることです)

        var text = "a sdasdf ad  a";
        int numSpaces = 2;
        var result = text.TakeWhile(c =>
            {
                if (c==' ')
                    numSpaces--;

                if (numSpaces <= 0)
                    return false;

                return true;
            });
        text = new string(result.ToArray());

私も@hoの答えを得て、それをサイクルにして、好きなだけ多くの単語に再び使用できるようにしました:P

        string str = "My Test String hello world";
        int numberOfSpaces = 3;
        int index = str.IndexOf(' ');     

        while (--numberOfSpaces>0)
        {
            index = str.IndexOf(' ', index + 1);
        }

        string result = str.Substring(0, index);
于 2010-04-08T17:39:52.693 に答える
1
 string[] parts = myString.Split(" ");
 string whatIWant = parts[0] + " "+ parts[1];
于 2010-04-08T12:27:46.860 に答える
0

あなたが考えていなかったかもしれないケースを処理するので、これには正規表現をお勧めします。

var input = "o1 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467";
var regex = new Regex(@"^(.*? .*?) ");
var match = regex.Match(input);
if (match.Success)
{
    Console.WriteLine(string.Format("'{0}'", match.Groups[1].Value));
}
于 2010-04-08T13:12:14.850 に答える
0

私は自分のコードでこの問題について考えていましたが、おそらくよりシンプルで高速なものを使用することになりますが、@Francisco が追加したものに似た別の Linq ソリューションを次に示します。

あなたが実際にやりたいことと最も似ているので、私はそれが好きです:「結果の部分文字列に2つ未満のスペースがある間に文字を取得します。

string input = "o1 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467";
var substring = input.TakeWhile((c0, index) => 
                                input.Substring(0, index + 1).Count(c => c == ' ') < 2);
string result = new String(substring.ToArray());
于 2010-10-21T13:42:02.660 に答える
0

他の人が言ったようにそれを行うより短い方法がありますが、自分で2番目のスペースに遭遇するまで各文字をチェックしてから、対応する部分文字列を返すこともできます.

static string Extract(string str)
{
    bool end = false;
    int length = 0 ;
    foreach (char c in str)
    {
        if (c == ' ' && end == false)
        {
            end = true;
        }
        else if (c == ' ' && end == true)
        {
            break;
        }

        length++;
    }

    return str.Substring(0, length);
}
于 2010-04-08T12:31:12.797 に答える
0

最初に indexOf "o1 " を見つけてみてください。次に、それを抽出します。この後、文字「1232.5467」を使用して文字列を分割します。

        string test = "o1 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467";
        string header = test.Substring(test.IndexOf("o1 "), "o1 ".Length);
        test = test.Substring("o1 ".Length, test.Length - "o1 ".Length);
        string[] content = test.Split(' ');
于 2010-04-08T12:37:21.203 に答える