私はこのような文字列を持っています:
"o1 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467"
"o1 1232.5467"
のみを抽出するにはどうすればよいですか?
抽出される文字の数は常に同じではありません。したがって、2番目のスペースが見つかるまで抽出したいだけです。
簡単なアプローチは次のとおりです。
string[] tokens = str.Split(' ');
string retVal = tokens[0] + " " + tokens[1];
次のようにString.IndexOfを2回使用するだけです。
string str = "My Test String";
int index = str.IndexOf(' ');
index = str.IndexOf(' ', index + 1);
string result = str.Substring(0, index);
最初のスペースの位置を取得します。
int space1 = theString.IndexOf(' ');
その後の次のスペースの位置:
int space2 = theString.IndexOf(' ', space1 + 1);
文字列の2番目のスペースまでの部分を取得します。
string firstPart = theString.Substring(0, space2);
上記のコードでは、togehterを1行にまとめています。
string firstPart = theString.Substring(0, theString.IndexOf(' ', theString.IndexOf(' ') + 1));
s.Substring(0, s.IndexOf(" ", s.IndexOf(" ") + 1))
正規表現を使用します。
Match m = Regex.Match(text, @"(.+? .+?) ");
if (m.Success) {
do_something_with(m.Groups[1].Value);
}
このようなもの:
int i = str.IndexOf(' ');
i = str.IndexOf(' ', i + 1);
return str.Substring(i);
string[] parts = myString.Split(" ");
string whatIWant = parts[0] + " "+ parts[1];
string testString = "o1 1232.5467 1232.5467.........";
string secondItem = testString.Split(new char[]{' '}, 3)[1];
:P
ご注意ください。ここでのアルゴリズムのほとんどは、2つ以上のスペースがあるかどうかをチェックしないため、2番目のWordとしてスペースを取得する可能性があると思います。
それが最善の方法かどうかはわかりませんが、私はそれをlinqingするのが少し楽しかったです: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);
私は自分のコードでこの問題を考えていたので、おそらくもっと簡単/高速なものを使用することになりますが、@ 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());
他の人が言ったようにそれを行うより短い方法がありますが、自分で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);
}
あなたが考慮しなかったかもしれないケースを扱うので、私はこれのために正規表現をお勧めします。
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));
}
最初に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(' ');