CodeGym /وبلاگ جاوا /Random-FA /11 متد parse() در جاوا با Examples
John Squirrels
مرحله
San Francisco

11 متد parse() در جاوا با Examples

در گروه منتشر شد
تجزیه در کلی ترین معنای آن استخراج اطلاعات لازم از برخی از داده ها، اغلب داده های متنی است. تجزیه در جاوا چیست؟ کلاس های جاوا زیادی وجود دارند که دارای متد parse() هستند . معمولاً متد parse() مقداری رشته را به عنوان ورودی دریافت می‌کند، اطلاعات لازم را از آن استخراج می‌کند و آن را به یک شی از کلاس فراخوان تبدیل می‌کند. به عنوان مثال، یک رشته دریافت کرد و تاریخی را که در این رشته "مخفی" بود، برگرداند. در این پست، ما قصد داریم نگاهی به 10 تنوع مفید parse() بیاندازیم .

0. parseInt()

بیایید از یکی از محبوب ترین متدهای parse() شروع کنیم، که دقیقاً parse() نیست ، بلکه parseInt() است . متد جاوا 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. روش parse() دوره

Period یک کلاس جاوا برای مدل سازی مقدار زمان بر حسب سال، ماه و روزهایی مانند "3 سال، 5 ماه و 2 روز" است. یک متد parse() برای بدست آوردن نقطه از یک متن دارد . در اینجا نحو پریود parse() است.
public static Period parse(CharSequence text)
CharSequence یک رابط است که توسط Strings پیاده سازی شده است. بنابراین می توانید از Strings به عنوان یک عنصر متنی در متد parse() استفاده کنید . مطمئناً رشته باید در قالب مناسب برای برگرداندن یک شی از کلاس Period باشد. این قالب PnYnMnD است . جایی که Y مخفف "سال"، M - برای "ماه"، D - برای "روز". N عددی مربوط به هر دوره است.
  • این روش یک پارامتر دارد - یک مقدار متن.
  • Parse() یک مقدار Period برمی گرداند که در آن مقدار یک رشته به یک پارامتر تبدیل می شود.
  • به عنوان یک استثنا، period parse() می تواند DateTimeParseException را برگرداند اگر مقدار رشته با ساختار یک نقطه مطابقت نداشته باشد.
در اینجا مثالی از استفاده از Period parse() در زمینه دنیای واقعی آورده شده است:
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 parse() است :
public Date parse(String the_text, ParsePosition position)
روش دارای دو پارامتر است:
  • Position: داده هایی در شاخص شروع که همیشه از نوع شیء ParsePosition است.
  • the_text: رشته ای را که متد تجزیه خواهد کرد، تعریف می کند و یک مقدار از نوع String است.
شما می توانید از این روش بدون اعلام موقعیت استفاده کنید. در این حالت داده ها از شاخص صفر شروع می شوند. SimpleDateFormat parse() یک تاریخ یا یک مقدار null برمی گرداند (در صورتی که رشته به دلیل خطا پردازش نشده باشد). در اینجا نمونه ای از پیاده سازی SimpleDateFormat parse() آورده شده است :
// 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
آخرین مورد تهی است زیرا هیچ الگوی تاریخی از موقعیت 5 شروع نمی شود. به هر حال، اگر سعی کنید date5 را بدون موقعیتی مانند Date date5 = simpleDateFormat2.parse(myString) تجزیه کنید ، یک استثنا دریافت خواهید کرد:
استثنا در موضوع "main" java.text.ParseException: تاریخ غیرقابل تجزیه: "اینجا تاریخ است: 14/010/2020" در java.base/java.text.DateFormat.parse(DateFormat.java:396) در ParseDemo2.main (ParseDemo2.java:22)

3. متد ()parse LocalDate

LocalDate کلاسی است که در جاوا 8 برای نشان دادن تاریخی مانند سال-ماه-روز ظاهر شد (روز از سال، روز از هفته و هفته به سال نیز قابل دسترسی است). LocalDate یک زمان یا منطقه زمانی را نشان نمی دهد. متد ()parse LocalDate دو نوع دارد. هر دوی آنها به تبدیل یک رشته به یک API تاریخ جدید جاوا 8 - java.time.LocalDate کمک می کنند .

تجزیه (متن CharSequence، DateTimeFormatter، Formatter)

این روش یک رشته را با استفاده از یک قالب‌کننده خاص برای به دست آوردن نمونه‌ای از 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
متد ()parse LocalDate با یک پارامتر دارای نحو بعدی است:
public static LocalTime parse(CharSequence text)
این روش نیازی به تعیین فرمت ندارد. پس از اینکه یک توسعه دهنده مقادیر رشته را در براکت ها وارد کرد، سیستم به طور خودکار از DateTimeFormatter.ISO_LOCAL_DATE استفاده می کند. این روش دارای یک پارامتر واحد است - یک متن CharSequence. می توانید در اینجا از مقدار رشته استفاده کنید. مطمئن شوید که null نباشد و به ساختار قالب‌کننده احترام بگذارد. اگر راهی برای تجزیه رشته وجود نداشته باشد، برنامه‌نویس 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. متد ()parse LocalDateTime

LocalDateTime یک شی تاریخ-زمان است که تاریخ-زمان را اغلب به صورت سال-ماه-روز-ساعت-دقیقه- ثانیه نشان می دهد. همچنین توسعه دهندگان می توانند از فیلدهای تاریخ و زمان دیگر (روز از سال، روز از هفته و هفته به سال) استفاده کنند. این کلاس غیر قابل تغییر است. زمان با دقت نانوثانیه نمایش داده می شود. برای مثال، می‌توانید مقدار «17 نوامبر 2020 در ساعت 13:30.30.123456789» را در LocalDateTime ذخیره کنید. این کلاس در مورد نمایش یک منطقه زمانی نیست. این بیشتر یک نمایش تاریخ استاندارد به اضافه زمان محلی است. متد ()parse LocalDateTime در دو نوع نشان داده شده است:
  • تجزیه استاتیک LocalDateTime (متن CharSequence) نمونه ای از LocalDateTime را از یک رشته متنی مانند 2007-12-03T10:15:30 برمی گرداند.
  • تجزیه استاتیک LocalDateTime (متن CharSequence، فرمت‌کننده DateTimeFormatter) نمونه‌ای از LocalDateTime را از یک رشته متنی با استفاده از یک قالب‌کننده خاص برمی‌گرداند.
در اینجا نمونه ای از متد ()parse 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. متد ()parse ZonedDateTime

کلاس ZonedDateTime تاریخ-زمان را با منطقه زمانی نشان می دهد. این کلاس غیر قابل تغییر است. این فیلدهای تاریخ و زمان را با دقت نانوثانیه و یک منطقه زمانی را با افست ناحیه که برای رسیدگی به زمان‌های تاریخ محلی مبهم استفاده می‌شود، ذخیره می‌کند. بنابراین اگر نیاز دارید مقداری مانند "14 اکتبر 2020 در ساعت 17:50.30.123456789 + 02:00 در منطقه زمانی اروپا/پاریس" نگه دارید، می توانید از ZonedDateTime استفاده کنید. این کلاس اغلب برای دستکاری داده های مبتنی بر زمان محلی استفاده می شود. ZondeDateTime parse() تجزیه کننده ای است که رشته را به توکن در سیستم ISO-8061 تقسیم می کند. در اینجا نمونه ای از مقداری است که پس از تجزیه به دست می آورید:
2020-04-05T13:30:25+01:00 اروپا/رم
هر زمان که به داده های با دقت بالا نیاز باشد استفاده می شود (در نهایت، داده هایی که به دست می آورید تا نانوثانیه دقیق هستند). این کلاس اغلب برای دستکاری داده های مبتنی بر زمان محلی استفاده می شود. بیایید نگاهی به نحو کلی متد 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 parse().

کلاس LocalTime یک زمان را نشان می دهد که اغلب به صورت ساعت-دقیقه-ثانیه مشاهده می شود. این کلاس نیز تغییرناپذیر است مانند ZonedDateTime.Time به دقت نانوثانیه نمایش داده می شود. به عنوان مثال، مقدار "13:45.30.123456789" را می توان در LocalTime ذخیره کرد. دو متد LocalTime parse() با یک و دو پارامتر وجود دارد . بیایید نگاهی به هر دو بیاندازیم:
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 parse() در تولید آورده شده است:
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 Parse().

MessageFormat کلاس Format را گسترش می دهد. Format یک کلاس پایه انتزاعی برای قالب‌بندی داده‌های حساس به محلی (تاریخ، پیام‌ها و اعداد) است. MessageFormat برخی از اشیاء را دریافت کرده و آنها را قالب بندی می کند. سپس رشته های فرمت شده را در مکان های مناسب به الگو وارد می کند. ()parse ()MessageFormat برای بدست آوردن یک مقدار رشته استفاده می‌شود، اگر شروع ایندکس داده شود. در اینجا نحو کلی روش آمده است:
public Object[] parse(String source, ParsePosition position)
جایی که منبع یک رشته برای تجزیه است و موقعیت، شاخص شروع تجزیه است. در اینجا نمونه ای از کارکرد متد ()parse 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. روش parse() سطح

هنگامی که یک برنامه نویس از یک Logger برای ثبت یک پیام استفاده می کند، با یک سطح گزارش مشخص ثبت می شود. هفت سطح ثبت داخلی وجود دارد:
  • شدید
  • هشدار
  • اطلاعات
  • CONFIG
  • خوب
  • ظریف تر
  • بهترین
همچنین سطوح اضافی OFF وجود دارد که می توان از آنها برای غیرفعال کردن ورود به سیستم و ALL استفاده کرد که می تواند برای فعال کردن ثبت همه پیام ها استفاده شود. سطح log با کلاس java.util.logging.Level نشان داده می شود . کلاس Level برای هر یک از این هفت سطح یک ثابت دارد. بنابراین شما از یکی از این ثابت ها، از جمله All و OFF هنگام ثبت پیام در Logger استفاده می کنید. همچنین تمام این سطوح به برخی از اعداد صحیح مقداردهی اولیه شدند. برای مثال FINE به 500 مقداردهی اولیه می شود. متد Level parse() اطلاعات مورد نیاز از یک مقدار متن را تجزیه می کند و یک شی Level را برمی گرداند. در اینجا نحو متد level parse() آمده است :
public static Level parse(String name)
پارامتر یک متد نام رشته ای است که توسعه دهنده می خواهد آن را تجزیه کند. این می تواند نام سطح، نام اولیه آن یا یک عدد صحیح دیگر باشد. در عوض، یک برنامه نویس مقدار نام Level را دریافت می کند که مطابق با رشته اولیه است. در صورتی که آرگومان حاوی نمادهایی باشد که تجزیه آنها غیرممکن باشد، سیستم 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());
   }
}
خروجی این است:
سطح = FINE Level = FINE OFF

9. روش تجزیه فوری ()

کلاس فوری یک نقطه لحظه ای واحد را در خط زمانی مدل می کند. می توانید از آن برای ضبط مُهرهای زمانی رویداد در برنامه خود استفاده کنید. Instant parse() یک مقدار Instant را از یک مقدار متنی بدست می آورد. رشته بعداً به عنوان مقدار منطقه زمانی UTC ذخیره می شود. این سیستم از DateTimeFormatter.ISO_INSTANT مانند 2020-10-14T11:28:15.00Z استفاده می کند. در اینجا یک نحو از متد Instant parse() آمده است :
public static Instant parse(CharSequence text)
برای تجزیه یک رشته و دریافت آنی، یک توسعه دهنده باید مطمئن شود که رشته حاوی مقداری متن است. در صورت تهی بودن، یک DateTimeException دریافت خواهید کرد. در اینجا مثالی از استفاده از تجزیه فوری در جاوا آورده شده است:
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. متد parse() NumberFormat

کلاس java.text.NumberFormat برای قالب بندی اعداد استفاده می شود. NumberFormat parse() یک متد پیش فرض این کلاس است. متد parse () کلاس NumberFormat یک رشته را به عدد تبدیل می کند. توسعه دهندگان از آن برای شکستن یک رشته به اعداد اجزای آن استفاده می کنند. تجزیه از ابتدای رشته شروع می شود. اگر قبل از فراخوانی متد parse () setParseIntegerOnly (true) را فراخوانی کنید ، همانطور که در مثال زیر نشان داده شده است، آنگاه فقط قسمت صحیح عدد تبدیل می شود. در اینجا سینتکس NumberFormat parse() آمده است :
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

نتیجه

روش های تجزیه بسیاری وجود دارد که توسعه دهندگان می توانند از آنها برای تبدیل رشته ها به انواع داده های مختلف استفاده کنند. اگرچه به خاطر سپردن آنها ممکن است خسته کننده به نظر برسد، اما چنین دستورات متنوعی به توسعه دهندگان انعطاف و دقت زیادی می دهد. حتماً استفاده از تجزیه داده ها را تمرین کنید تا مطمئن شوید که نحو را به خاطر می آورید و فراموش نمی کنید که کدام پارامتر برای هر روش ضروری است.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION