التحليل بمعناه العام هو استخراج المعلومات الضرورية من بعض البيانات، وغالبًا ما تكون بيانات نصية. ما هو التحليل في جافا؟ هناك العديد من فئات Java التي تحتوي على طريقة التحليل () . عادةً ما تتلقى طريقة التحليل () بعض السلاسل كمدخلات، و"تستخرج" المعلومات الضرورية منها وتحولها إلى كائن من فئة الاستدعاء. على سبيل المثال، تلقت سلسلة وأعادت التاريخ الذي كان "مخفيًا" في هذه السلسلة. في هذه المقالة، سنلقي نظرة على 10 أشكال مفيدة من parse() .
0.parseInt()
لنبدأ بإحدى طرق parse() الأكثر شيوعًا ، وهي ليست parse() بالضبط ، بل parseInt() . يتم استخدام طريقة Java parseInt () للحصول على نوع البيانات البدائي من سلسلة معينة. وبعبارة أخرى فإنه يحول سلسلة إلى رقم. يمكن أن يحتوي parseInt () على وسيطة واحدة أو اثنتين. إليك بناء جملة parseInt() :static int parseInt(String s)
static int parseInt(String s, int radix)
حيث s هي السلسلة التي تمثل قيمة عشرية موقعة وجذور قاعدة النظام الرقمي. ضع في اعتبارك أنه لا توجد قيمة أساسية افتراضية — تحتاج إلى إدخال قيمة ضمن النطاق 2 و36. وإليك مثال. كيفية التحليل باستخدام ParseInt():
public class ParseInt0 {
public static void main(String args[]){
int x = Integer.parseInt("12");
double c = Double.parseDouble("12");
int b = Integer.parseInt("100",2);
System.out.println(Integer.parseInt("12"));
System.out.println(Double.parseDouble("12"));
System.out.println(Integer.parseInt("100",2));
System.out.println(Integer.parseInt("101", 8));
}
}
الإخراج هو:
12 12.0 4 65
1. طريقة تحليل الفترة ().
الفترة عبارة عن فئة Java لنمذجة مقدار الوقت من حيث السنوات والأشهر والأيام مثل "3 سنوات و5 أشهر ويومين". لديها طريقة تحليل () للحصول على نقطة من النص. إليك بناء جملة الفترة parse()public static Period parse(CharSequence text)
CharSequence هي واجهة يتم تنفيذها بواسطة السلاسل. لذا يمكنك استخدام السلاسل كعنصر نص في طريقة التحليل () . تأكد من أن السلسلة يجب أن تكون بالتنسيق الصحيح لإرجاع كائن من فئة الفترة. هذا التنسيق هو PnYnMnD . حيث Y تعني "السنة"، وM - تعني "الشهر"، وD - تعني "اليوم". N هو رقم مطابق لكل قيمة فترة.
- تحتوي الطريقة على معلمة واحدة - قيمة نصية.
- تقوم Parse() بإرجاع قيمة فترة حيث تصبح قيمة السلسلة معلمة.
- كاستثناء، يمكن أن يُرجع تحليل الفترة () DateTimeParseException إذا كانت قيمة السلسلة لا تتوافق مع بنية الفترة.
import java.time.Period;
public class ParseDemo1 {
public static void main(String[] args)
{
//Here is the age String in format to parse
String age = "P17Y9M5D";
// Converting strings into period value
// using parse() method
Period p = Period.parse(age);
System.out.println("the age is: ");
System.out.println(p.getYears() + " Years\n"
+ p.getMonths() + " Months\n"
+ p.getDays() + " Days\n");
}
}
}
}
الإخراج هو:
العمر: 17 سنة 9 أشهر 5 أيام
2.SimpleDateFormat طريقة Parse ().
SimpleDateFormat عبارة عن فئة تُستخدم لتنسيق التواريخ وتحليلها بطريقة حساسة للغة. تقوم طريقة SimpleDateFormat parse() بتقسيم السلسلة إلى رموز التاريخ وإرجاع قيمة بيانات بالتنسيق المقابل. تبدأ الطريقة في تحليل السلسلة في فهرس محدد بواسطة المطور. هذا هو بناء جملة تحليل SimpleDateFormat() :public Date parse(String the_text, ParsePosition position)
تحتوي الطريقة على معلمتين:
- الموضع: البيانات الموجودة في فهرس البداية والتي تكون دائمًا من نوع كائن ParsePosition.
- the_text: يحدد السلسلة التي ستقوم الطريقة بتحليلها وهي قيمة نوع السلسلة.
// Parsing strings into the Date format with two different patterns import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ParseDemo2 {
public static void main(String[] args) throws ParseException {
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("dd/MM/yyyy");
//simpleDateFormat1.setLenient(false);
Date date1 = simpleDateFormat1.parse("010/14/2020");
System.out.println(date1);
Date date2 = simpleDateFormat2.parse("14/10/2020");
System.out.println(date2);
ParsePosition p1 = new ParsePosition(18);
ParsePosition p2 = new ParsePosition(19);
ParsePosition p3 = new ParsePosition(5);
String myString = "here is the date: 14/010/2020";
Date date3 = simpleDateFormat2.parse(myString,p1);
Date date4 = simpleDateFormat2.parse(myString,p2);
Date date5 = simpleDateFormat2.parse(myString,p3);
System.out.println(date3);
System.out.println(date4);
System.out.println(date5);
}
}
الإخراج هو:
الأربعاء أكتوبر 14 00:00:00 EEST 2020 الأربعاء أكتوبر 14 00:00:00 EEST 2020 الأربعاء أكتوبر 14 00:00:00 EEST 2020 الأحد أكتوبر 04 00:00:00 EEST 2020 null
الأخير فارغ لأنه لا يوجد نمط تاريخ يبدأ من الموضع الخامس. بالمناسبة، إذا حاولت تحليل date5 بدون موضع مثل Date date5 = simpleDateFormat2.parse(myString) ، فستحصل على استثناء:
استثناء في مؤشر الترابط "الرئيسي" java.text.ParseException: تاريخ غير قابل للتحليل: "هنا التاريخ: 14/010/2020" في java.base/java.text.DateFormat.parse(DateFormat.java:396) في ParseDemo2.main (ParseDemo2.java:22)
3. طريقة تحليل LocalDate ().
LocalDate هي فئة ظهرت في Java 8 لتمثيل تاريخ مثل يوم وشهر وسنة (يمكن أيضًا الوصول إلى يوم من السنة ويوم من الأسبوع وأسبوع من السنة). LocalDate لا يمثل وقتًا أو منطقة زمنية. تحتوي طريقة تحليل LocalDate () على متغيرين. يساعد كلاهما في تحويل سلسلة إلى واجهة برمجة تطبيقات Java 8 date جديدة - java.time.LocalDate .تحليل (نص CharSequence، DateTimeFormatter، المنسق)
تقوم هذه الطريقة بتوزيع سلسلة باستخدام منسق محدد للحصول على مثيل LocalDate. إليك بناء جملة الطريقة:public static LocalTime parse(CharSequence text,
DateTimeFormatter formatter)
هناك معلمتان للطريقة - النص الذي سيتم تحليله والمنسق الذي سيطبقه المطور. كقيمة إرجاع، تقوم الطريقة بإرجاع كائن LocalTime الذي سيتم التعرف عليه على أنه وقت النهار المحلي. إذا لم تتمكن القيمة النصية من المرور عبر التحليل، فسيقوم النظام بطرح DayTimeParseException. لنحصل على مثال رمزي لاستخدام LocalDate parse() مع معلمتين:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class ParserDemo3 {
public static void main(String[]args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String date = "14/10/2020";
LocalDate localDate = LocalDate.parse(date, formatter);
System.out.println("parsed local date: " + localDate);
System.out.println("formatted local date: " + formatter.format(localDate));
}
}
الإخراج هو:
التاريخ المحلي الذي تم تحليله: 2020-10-14 التاريخ المحلي المنسق: 14/10/2020
طريقة LocalDate parse() ذات معلمة واحدة لها الصيغة التالية:
public static LocalTime parse(CharSequence text)
لا تتطلب هذه الطريقة تحديد المنسق. بعد قيام المطور بإدخال قيم السلسلة بين الأقواس، سيستخدم النظام تلقائيًا DateTimeFormatter.ISO_LOCAL_DATE. تحتوي هذه الطريقة على معلمة واحدة — نص CharSequence. يمكنك استخدام هنا قيمة السلسلة. تأكد من أنها ليست فارغة وتحترم بنية المنسق. إذا لم تكن هناك طريقة لتحليل سلسلة، فسيحصل المطور على DateTimeExceptionAlert. فيما يلي مثال لتطبيق LocalDate parse() :
import java.time.*;
public class ParseDemo3 {
public static void main(String[] args)
{
// let’s make a new LocalDate object
LocalDate localDate = LocalDate.parse("2020-10-14");
System.out.println("LocalDate : " + localDate);
}
}
الإخراج هو:
التاريخ المحلي : 2020-10-14
4. طريقة تحليل LocalDateTime ().
LocalDateTime هو كائن التاريخ والوقت الذي يمثل التاريخ والوقت الذي يتم عرضه في كثير من الأحيان على أنه سنة-شهر-يوم-ساعة-دقيقة-ثانية. يمكن للمطورين أيضًا استخدام حقول التاريخ والوقت الأخرى (يوم من السنة، ويوم من الأسبوع، وأسبوع من السنة). هذه الفئة غير قابلة للتغيير. يتم تمثيل الوقت بدقة النانو ثانية. على سبيل المثال، يمكنك تخزين القيمة "17 نوفمبر 2020 الساعة 13:30.30.123456789" في LocalDateTime. لا يتعلق هذا الفصل بتمثيل منطقة زمنية. إنه بالأحرى تمثيل تاريخ قياسي بالإضافة إلى التوقيت المحلي. طريقة تحليل LocalDateTime () ممثلة في متغيرين:- يقوم تحليل LocalDateTime الثابت (نص CharSequence) بإرجاع مثيل LocalDateTime من سلسلة نصية مثل 2007-12-03T10:15:30.
- يقوم تحليل LocalDateTime الثابت (نص CharSequence، ومنسق DateTimeFormatter) بإرجاع مثيل LocalDateTime من سلسلة نصية باستخدام منسق محدد.
import java.time.*;
public class ParseDemo11 {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.parse("2020-11-17T19:34:50.63");
System.out.println("LocalDateTime is: " + localDateTime);
}
}
الإخراج هو:
LocalDateTime هو: 2020-11-17T19:34:50.630
5. طريقة تحليل ZonedDateTime ().
تمثل الفئة ZonedDateTime تاريخًا ووقتًا مع منطقة زمنية. هذه الفئة غير قابلة للتغيير. يقوم بتخزين حقول التاريخ والوقت بدقة نانو ثانية، ومنطقة زمنية، مع إزاحة المنطقة المستخدمة للتعامل مع أوقات التاريخ المحلية الغامضة. لذا، إذا كنت بحاجة إلى الاحتفاظ بقيمة مثل "14 أكتوبر 2020 الساعة 17:50.30.123456789 +02:00 في المنطقة الزمنية لأوروبا/باريس"، فيمكنك استخدام ZonedDateTime. غالبًا ما يتم استخدام الفصل لمعالجة البيانات المستندة إلى التوقيت المحلي. ZondeDateTime parse() هو محلل يقوم بتقسيم السلسلة إلى رموز مميزة في نظام ISO-8061. فيما يلي مثال على القيمة التي ستحصل عليها بعد التحليل:
2020-04-05T13:30:25+01:00 أوروبا/روما
يتم استخدامه عند الحاجة إلى بيانات عالية الدقة (بعد كل شيء، البيانات التي تحصل عليها دقيقة تصل إلى نانو ثانية). غالبًا ما يتم استخدام الفصل لمعالجة البيانات المستندة إلى التوقيت المحلي. دعونا نلقي نظرة على بناء الجملة العام لطريقة ZonedDateTime parse() التي يستخدمها مطورو طريقة ZonedDateTime لتحويل قيم السلسلة إلى فئة ZonedDateTime.
public static ZonedDateTime parse(CharSequence text)
المعلمة الوحيدة التي تستخدمها الطريقة هي نص سلسلة. كقيمة إرجاع، ستحصل على كائن واحد أو سلسلة من الكائنات بتنسيق ZonedDateTime. إذا كان هناك خطأ أثناء التحليل أو كان من المستحيل البدء به، فسترجع الطريقة DateTimeParseException. هناك أيضًا طريقة parse () بمتغيرين.
public static ZonedDateTime parse(CharSequence text, DateFormatter formatter)
تحصل هذه الطريقة على مثيل ZonedDateTime من قيمة نصية باستخدام منسق محدد. يتم استخدام الطريقة ذات المعلمة الواحدة، المنسق DateTimeFormatter.ISO_LOCAL_TIME بشكل افتراضي. دعونا نلقي نظرة على حالة استخدام ZonedDateTime parse():
// An example program that uses
// ZonedDateTime.parse() method
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class ParseDemo4 {
public static void main(String[] args) {
ZonedDateTime zonedDateTime = ZonedDateTime.parse("2020-10-15T10:15:30+01:00");
System.out.println(zonedDateTime);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ISO_ZONED_DATE_TIME;
String date = "2020-10-15T13:30:25+01:00";
ZonedDateTime zoneDateTime1 = ZonedDateTime.parse(date, dateTimeFormatter);
System.out.println(zoneDateTime1);
}
}
الإخراج هو:
2020-10-15T10:15:30+01:00 2020-10-15T13:30:25+01:00
6. طريقة تحليل LocalTime ().
يمثل Class LocalTime وقتًا، غالبًا ما يتم عرضه على أنه ساعة-دقيقة-ثانية. هذه الفئة أيضًا غير قابلة للتغيير مثل ZonedDateTime. يتم تمثيل الوقت بدقة النانو ثانية. على سبيل المثال، يمكن تخزين القيمة "13:45.30.123456789" في LocalTime. هناك طريقتان لتحليل LocalTime() ، بمعلمة واحدة ومعلمتين. دعونا نلقي نظرة على كليهما:public static LocalTime parse(CharSequence text)
يمكنك استخدام LocalTime parse() مع معلمة واحدة فقط، وهي السلسلة التي تريد تحليلها. في هذه الحالة، يتم استخدام المنسق DateTimeFormatter.ISO_LOCAL_TIME بشكل افتراضي.
Method with two parameters has the next syntax:
public static LocalTime parse(CharSequence text,
DateTimeFormatter formatter)
يحصل على مثيل LocalTime من قيمة نصية باستخدام منسق محدد. تقوم كلتا الطريقتين بإرجاع قيمة LocalTime بتنسيق hh/mm/ss. احترس من تنبيهات DateTimeParceException. إنها تعني أن تنسيق نص السلسلة لا يتوافق مع تنسيق كائنات LocalTime. فيما يلي مثال لاستخدام تحليل LocalTime() في الإنتاج:
import java.time.*;
import java.time.format.*;
public class ParseDemo5 {
public static void main(String[] args)
{
LocalTime localTime
= LocalTime.parse("10:25:30");
// return the output value
System.out.println("LocalTime : "
+ localTime);
// create a formater
DateTimeFormatter formatter
= DateTimeFormatter.ISO_LOCAL_TIME;
LocalTime localTime1
= LocalTime.parse("12:30:50");
// parse a string to get a LocalTime object in return
LocalTime.parse("12:30:50",
formatter);
// print the output
System.out.println("LocalTime : "
+ localTime1);
}
}
7. طريقة تحليل رسالة ()MessageFormat
يقوم messageFormat بتوسيع فئة التنسيق. التنسيق عبارة عن فئة أساسية مجردة لتنسيق البيانات الحساسة للغة (التواريخ والرسائل والأرقام). يحصل messageFormat على بعض الكائنات ويقوم بتنسيقها. ثم يقوم بإدراج السلاسل المنسقة في النموذج في الأماكن المناسبة. يتم استخدام تحليل messageFormat () للحصول على قيمة سلسلة إذا تم إعطاء بداية الفهرس. إليك بناء الجملة العام للطريقة:public Object[] parse(String source, ParsePosition position)
حيث المصدر عبارة عن سلسلة للتحليل والموضع هو فهرس البداية للتحليل. فيما يلي مثال على طريقة عمل طريقة التحليل ()MessageFormat :
import java.text.MessageFormat;
import java.text.ParsePosition;
public class ParseDemo7 {
public static void main(String[] args) {
try {
MessageFormat messageFormat = new MessageFormat("{1, number, #}, {0, number, #.#}, {2, number, #.##}");
ParsePosition pos = new ParsePosition(3);
Object[] hash = messageFormat.parse("12.101, 21.382, 35.121", pos);
System.out.println("value after parsing: ");
for (int i = 0; i < hash.length; i++)
System.out.println(hash[i]);
}
catch (NullPointerException e) {
System.out.println("\nNull");
System.out.println("Exception thrown : " + e);
} }
}
8. طريقة تحليل المستوى ().
عندما يستخدم مبرمج مسجل لتسجيل رسالة، يتم تسجيله بمستوى سجل معين. هناك سبعة مستويات سجل مدمجة:- شديد
- تحذير
- معلومات
- التكوين
- بخير
- أدق
- الأفضل
public static Level parse(String name)
معلمة الطريقة هي اسم السلسلة التي يريد المطور تحليلها. يمكن أن يكون اسمًا للمستوى أو اسم التهيئة الخاص به أو عددًا صحيحًا آخر. في المقابل، يحصل المبرمج على قيمة اسم المستوى، والتي تتوافق مع قيمة السلسلة الأولية. في حالة احتواء الوسيطة على رموز من المستحيل تحليلها، فسيقوم النظام بطرح IllegalArgumentException. إذا كانت السلسلة لا تحتوي على أي قيم، فسيحصل المطور على NullPointerException. إليك جزء من التعليمات البرمجية يوضح تنفيذ Level parse() .
import java.util.logging.Level;
public class ParseDemo6 {
public static void main(String[] args)
{
Level level = Level.parse("500");
System.out.println("Level = " + level.toString());
Level level1 = Level.parse("FINE");
System.out.println("Level = " + level1.toString());
Level level2 = level.parse ("OFF");
System.out.println(level2.toString());
}
}
الإخراج هو:
المستوى = المستوى الدقيق = إيقاف الدقة
9. طريقة التحليل الفوري ().
يصمم الفصل الفوري نقطة فورية واحدة على الخط الزمني. يمكنك استخدامه لتسجيل الطوابع الزمنية للأحداث في تطبيقك. يحصل التحليل الفوري () على قيمة فورية من قيمة نصية. سيتم تخزين السلسلة لاحقًا كقيمة المنطقة الزمنية UTC. يستخدم النظام DateTimeFormatter.ISO_INSTANT مثل 2020-10-14T11:28:15.00Z. فيما يلي بناء جملة طريقة التحليل الفوري () :public static Instant parse(CharSequence text)
لتحليل سلسلة والحصول على لحظة، يحتاج المطور إلى التأكد من أن السلسلة تحتوي على بعض النص. إذا كان فارغًا، فستحصل على DateTimeException. فيما يلي مثال لاستخدام التحليل الفوري في Java:
import java.time.Instant;
public class ParseDemo8 {
public static void main(String[] args) {
Instant instant = Instant.parse("2020-10-14T10:37:30.00Z");
System.out.println(instant);
}
}
الإخراج هو:
2020-10-14T10:37:30Z
10. طريقة تحليل NumberFormat ().
يتم استخدام فئة java.text.NumberFormat لتنسيق الأرقام. تحليل NumberFormat () هو الأسلوب الافتراضي لهذه الفئة. تقوم طريقة التحليل () لفئة NumberFormat بتحويل سلسلة إلى رقم. يستخدمه المطورون لتقسيم السلسلة إلى أرقام مكوناتها. يبدأ التحليل من بداية السلسلة. إذا قمت باستدعاء setParseIntegerOnly (صحيح) قبل استدعاء الأسلوب parse () ، كما هو موضح في المثال التالي، فسيتم تحويل الجزء الصحيح فقط من الرقم. إليك بناء جملة تحليل NumberFormat() :public Number parse(String str)
كمعلمة، تقبل الدالة السلاسل. القيمة المرجعة للتحليل هي قيمة رقمية. إذا تعذر تحليل بداية السلسلة، فستحصل على تحذير ParseException. لرؤية تطبيق طريقة NumberFormat parse() ، ألقِ نظرة على المثال أدناه:
import java.text.NumberFormat;
import java.text.ParseException;
public class ParseDemo9 {
public static void main(String[] args) throws ParseException {
NumberFormat numberFormat = NumberFormat.getInstance();
System.out.println(numberFormat.parse("3,141592"));
numberFormat.setParseIntegerOnly(true);
System.out.println(numberFormat.parse("3,141592"));
}
}
الإخراج هو:
3.141592 3
GO TO FULL VERSION