最後のドットの位置で文字列を2つに分割するには、どのような方法があり、より慣れていますか?基本的に、拡張子をファイルパスまたはURLのパスの残りの部分から分離します。今まで私がやっていることはスプリット( "。")と、最後の部分を除くすべてのString.Join( "。")です。バズーカを使ってハエを殺すような音がします。Cの最後のドットの文字列を壊す最も良い方法#
答えて
あなたは、パフォーマンス、何かしたい場合は、次の文字が最後に見つかった位置を返すのlastIndexOfメソッドを使用する方法について
string s = "a.b.c.d";
int i = s.LastIndexOf('.');
string lhs = i < 0 ? s : s.Substring(0,i),
rhs = i < 0 ? "" : s.Substring(i+1);
あなたはPath.GetFilenameWithoutExtension()を使用することができ
またはそれはあなたのために動作しない場合:LastIndexOf多分ここにあなたにいくつかの使用の
int idx = filename.LastIndexOf('.');
if (idx >= 0)
filename = filename.Substring(0,idx);
文字列の方法。
しかし、PathまたはFileInfo演算子は、ファイル名ベースの演算に適しています。
私は、あなたが本当に探していることはPath.GetFileNameWithoutExtension Method (System.IO)だと思うが、それを一体のために:
string input = "foo.bar.foobar";
int lastDotPosition = input.LastIndexOf('.');
if (lastDotPosition == -1)
{
Console.WriteLine("No dot found");
}
else if (lastDotPosition == input.Length - 1)
{
Console.WriteLine("Last dot found at the very end");
}
else
{
string firstPart = input.Substring(0, lastDotPosition);
string lastPart = input.Substring(lastDotPosition + 1);
Console.WriteLine(firstPart);
Console.WriteLine(lastPart);
}
、拡張子のないパスを取得
System.IO.Path.GetFileNameWithoutExtension(fileName)
を使用して取得するには(ドット含む)extenstion、使用
Path.GetExtension(fileName)
EDIT:
残念ながらGetFileNameWithoutExtensionは、先頭のパスを取り除き、その代わりに、あなたが使用できます。
if (path == null)
{
return null;
}
int length = path.LastIndexOf('.');
if (length == -1)
{
return path;
}
return path.Substring(0, length);
また、URLで動作します – jmservera
Path.GetExtension()
はあなたを助ける必要があります。
何を。サブストリングを使用して、必要なものを抽出することができます。
String.LastIndexOfは、文字列内に存在するドットの位置を返します。 String.Substringメソッドを使用すると、文字列を分割できます。
あなたは、文字列のメソッド
のlastIndexOfを使用してタスクをacomplishするサブストリングができます。
これはURLの部分で動作しますか(\\の代わりに/を使用します)?そして、それはまた、 "フォルダ"を返すでしょうか? Path.GetFilename()は、ディレクトリのないAFAIKファイルの名前のみを返します。 – Pablo
OPがファイルパスのみについて質問した場合、これは+1になります。しかし、System.IO.PathドキュメントではURLのサポートについては言及していません。 – OregonGhost
正しいですが、ファイル名にパスが含まれていないとうまくいっているかもしれません。 –