هل هناك مونو (.NET) مكافئ فئة الماسحة الضوئية في جافا

StackOverflow https://stackoverflow.com/questions/1867029

سؤال

في Java، هناك فئة لطيفة تسمى الماسح الضوئي لقراءة سلاسل وتدفقات تنسيق معين لهياكل البيانات مثل الأعداد الصحيحة، يطفو، ... هل هناك أي ما يعادله في أحادي؟ في .NET هناك قارئ ثنائي، لكنه يقرأ البيانات كمبالين. أريد فصل قراءة البيانات عن طريق تحليله من سلسلة.

تحرير: رد الفعل على الإجابات الحالية، أعرف أن معظم أنواع البيانات لها طريقة تحليل، ولكن المشكلة مع هذه هي، فهي لا تقرأ السلسلة بالتتابع. في Java، يمكنك ببساطة تهيئة الكائن، ومن خلال تنشيط الأساليب، يمكنك قراءة أنواع البيانات بالتتابع.

هل كانت مفيدة؟

المحلول

حسنا، نظرا لأنك تقرأ ملف في حالات الاختبار، فسوف أفترض أنك تعرف التنسيق الدقيق للبيانات الواجب وكيف يحتاج إلى تحليله. النظر إلى جافا Parser فئة في الوثائق تجعلها تبدو معقدة للغاية أو أكثر بكثير من فئة راحة. يبدو أنه يقوم فقط بتكييس سلسلة Stream على المسافات وتوفير الوظائف لأخذ الرمز المميز وتحليله. وحتى كما أعرف، ليس لديه .NET فئة معادلة. لذلك إذا كنت تريد واحدة لإعادة الاستخدام، فستحتاج إلى كتابة واحدة بنفسك.

لكن الخوارزمية الأساسية التي تحتاجها هي قراءة محتويات الملفات، وتقسيم الرموز، وتحليلها. إذا كان الملف الخاص بك حجم معقول، فيمكنك استخدامه File.ReadAllLines() الذي يقرأ محتويات خط ملف الملفات في String[]. وبعد أو يمكنك استخدام StreamReader فئة لقراءة الخطوط واحدة في وقت واحد باستخدام لها ReadLine(). وبعد ثم بمجرد أن يكون لهم في خط، فإنك ستخبطها StringSplit(), ثم تحليلهم.

عدم معرفة بالضبط كيف تحتاج إلى استخدام القيم في الملف، يمكن أن يكون نمط أساسي للغاية:

// 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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top