2010-11-21 8 views
0

私はAndroid 2.2の単純なファイルデコーダを作成しています。このファイル名は、デコードされたファイルのファイル名として使用されます(期待どおり)。Java:部分文字列によって生成された文字列は、ハードコードされた文字列として扱われません。

ファイル名は部分文字列name=で識別されるため、実際の名前は5文字後に始まります。この行はBufferedReaderによって読み取られ、currLineに一時的に格納されます。

私は理解しても、ウェブ上で見つけることができませんいくつかの理由について、文字列は常に文字列であることを思えません...

私は

String fileOutName = "testfile.txt";
System.out.println("fileOutName contains: "+ fileOutName);
System.out.println("fileOutName type: "+ fileOutName.getClass());

としてファイル名を与えるときに動作しますそれはすべきです。しかし、動作しないファイルからの読み込み:

String fileOutName = currLine.substring((currLine.indexOf("name=")+5));

は、出力ファイル、またIO例外を与えません。文字列が正常にかかわらず、解析されます。私は両方のケースを見つけるにSystem.outデバッグ行から:

fileOutName contains: testfile.txt
fileOutName type: class java.lang.String

誰もが、これは動作しないでしょう理由として任意の手掛かりを持っていますか? :S

おかげで

+0

正しいパスを指定していますか? – st0le

+0

ファイルヘッダーを読むとコードスニペットを投稿できますか? –

答えて

2

うわ...もちろんsubstringルーチンはまた、明らかに、ファイル名にすることはできませんend of line文字を得ていたが、どうやらプリントラインで返されていない:)

だから、です固定:

String fileOutName = currLine.substring((currLine.indexOf("name=")+5), currLine.length() -1);

だけで答えが私を襲った質問を装っことで、これを見ているとコメントしてくれてありがとう...誰もが私の答えaをフラグしてくださいすることができ本当ですか?私は次の2日間それをすることはできません。

+4

あなた以外の誰もあなたの答えを正しいものとしてマークすることはできません。ただのカップルを待つ=) –

+0

currLine.length()-1の代わりに、String.trim()メソッドを考えるかもしれません。こうすることで、先頭と末尾のすべての空白が削除されます。私にはそれはもう少し読みやすいです:) – extraneon

+0

ありがとうございました! @extraneon - フォーマットは空白を許すので、-1を使用します。 name =の後、すべての文字は、私がもちろん前に含んでいたEOLを除いて、望ましい名前として扱われるべきです。それは間違いなくもっと読みやすいので、私は未来のことを心に留めておきます:) –

関連する問題