جاوا اسکنر تجزیه متن را آسان کرده است.
کلاس Scanner جاوا و عبارتهای منظم، تجزیه رشته را به حد قابل توجهی آسان کردهاند. میتوان از آن به طرق مختلفی بهره برد که در این مطلب توضیح میدهیم.
جاوا کلاس Scanner را در اختیار قرار میدهد که به عنوان تجزیه کننده (parser) میتواند مورد استفاده قرار گیرد. این کلاس یک عبارت منظم به عنوان ورودی دریافت کرده و بخشهایی که توسط جداکننده (delimiter) جدا شده است را برمیگرداند. چند سناریو استفاده از این کلاس را مشاهده میکنیم:
شمارش لغات در یک فایل
جداکننده پیشفرض کلاس اسکنر whitespace است. با استفاده از این حقیقت میتوانیم تعداد لغات یک فایل را بشماریم. کد زیر هم شماره و هم کلمات فایل را چاپ میکند. دقت کنید که اسکنر واسط کاربری AutoCloseable را پیادهسازی میکند پس میتوانیم آن را در بلوک try-with-resources استفاده کنیم.
try (Scanner scanner = new Scanner(new File(filename));) { int nword = 0; while (scanner.hasNext()) { String sent = scanner.next(); nword++; System.out.printf("%3d) %s%n", nword, sent); } }
خواندن پاراگراف به پاراگراف متن
با تعیین جداکننده خط خالی، میتوانید پاراگراف به پاراگراف متن را بخوانید. الگوی عبارت منظم flag چندخطی را مشخص میکند بنابر این ^ و $ در ابتدا و انتهای هر خط مطابقت داده میشود نه برای کل ورودی.
try (Scanner scanner = new Scanner(new File(filename));) { scanner.useDelimiter("(?m:^$)"); int ntoken = 0; while (scanner.hasNext()) { String token = scanner.next(); ntoken++; System.out.printf("%3d) %s%n", ntoken, token); } }
خواندن کل یک فایل
برای خواندن کل یک فایل در یک رشته میتوانید روش زیر را انجام دهید. جداکننده در اینجا عبارت منظمی است برای شروع یک فایل.
try (Scanner scanner = new Scanner(new File(filename));) { scanner.useDelimiter("\\A"); String all = scanner.next(); }
جمع بندی
کلاس اسکنر جاوا برای تجزیه متن میتواند مورد استفاده قرار گیرد. با استفاده از یک جداکننده مناسب، کارهای متفاوتی با آن میتواند انجام گیرد.
منبع: