Javaでスキャナクラスと同等のモノ(.NET)があります
-
18-09-2019 - |
質問
Javaでは、整数のようなデータ構造に特定の形式の文字列やストリームを読み込むためのスキャナと呼ばれる素敵なクラスがあり、...モノラルで任意の等価はあり浮かびますか? .NETのバイナリリーダーがあり、それはバイナリとしてデータを読み出します。私は、文字列から、それを解析してデータを読み取るクラスを望んでます。
編集:現在の回答の反応、私はデータ型のほとんどは構文解析メソッドを持っているが、これらの問題点があり、彼らは文字列の順番を読んでいない知っています。 Javaでは、あなたは、単にオブジェクトを初期化、およびメソッドを活性化させることにより、あなたは順次データ・タイプを読みます。
解決
まあ、私はあなたが入ってくるデータの正確な形式を知っていると仮定するつもりだし、それが解析される必要がありますか。ドキュメントのJavaのParser
クラスを見てみると、それは非常に複雑またはコンビニエンスクラスよりもはるかに見えるようありません。ちょうど、スペース上のストリーム文字列をトークン化し、トークンを取り、それを解析するための機能を提供するように見えます。そして、私の知る限りでは、.NETは同等のクラスを持っていません。あなたは、再利用のための1をしたいのであれば、あなたは1を自分で書く必要があります。
しかし、あなたが必要とする基本的なアルゴリズムは、ファイルの内容を読んでトークンを分割し、それらを解析することです。あなたのファイルはサイズが合理的である場合は、File.ReadAllLines()
にファイルの行ごとの内容を読み取りString[]
を使用することができます。それとも、そのStreamReader
を使用して、一度にライン1を読み取るためにReadLine()
クラスを使用することができます。あなたはラインでそれらを持って次にたら、あなたはString
のSplit()
でそれらをトークン化し、それらを解析します。
正確には、ファイル内の値を使用する必要がある方法を知らない、非常に基本的なパターンは可能性があります:
// Read in the whole file
String[] strLines = File.ReadAllLines(strFilePath);
// Loop through each of the lines to process their contents
foreach (String strLine in strLines) {
// Tokenize on the spaces
String[] strTokens = strLine.Split(' ');
// Parse the values
int iIntValue = Int.Parse(strTokens[0]);
double dDoubleValue = Double.Parse(strTokens[1]);
// Do something with the values
}
あなた自身のParser
クラスを作成すると、それらを使用すると、あなたが状態および自動事前トークンを維持することができるようになります。あなたはそのルートを行く場合は、StreamReader
は最良の選択肢かもしれません。
他のヒント
ほとんどの基本データ型はあなたのためにそれを行います.Parse
と.TryParse()
メソッドを持っています。
たとえば Int32.TryParse の方法。
.NETで、タイプの多くは、文字列パラメータをとる静的.Parse()
と.TryParse()
方法を持っています。
あなたが好きな何かを行うことができます:
Stream s = new Stream();
// Wire up the stream.
StreamReader reader = new StreamReader(s);
String value = reader.ReadToEnd();
int valueAsInt = Int32.TryParse(value);