JavaRush /Блоги Java /Random-TG /Ифодаҳои муқаррарӣ дар Java, Қисми 4

Ифодаҳои муқаррарӣ дар Java, Қисми 4

Дар гурӯҳ нашр шудааст
Мо ба таваҷҷуҳи шумо тарҷумаи дастури мухтасарро оид ба ибораҳои муқаррарӣ дар Java пешкаш мекунем, ки аз ҷониби Ҷефф Фризен барои вебсайти javaworld навишта шудааст . Барои осонии хондан, мо мақоларо ба чанд қисм тақсим кардем. Ифодаҳои муқаррарӣ дар Java, Қисми 4 - 1 Ифодаҳои муқаррарӣ дар Java, Қисми 1 Ифодаҳои муқаррарӣ дар Java, Қисми 2 Ифодаҳои муқаррарӣ дар Java, Қисми 3

Усулҳои кор бо гурӯҳҳои забтшуда

Рамзи сарчашмаи барнома RegexDemoзанги методиро дар бар мегирад m.group(). Ин усул group()яке аз якчанд усулҳои синф мебошад Matcher, ки барои кор бо гурӯҳҳои забтшуда нигаронида шудааст:
  • Ин усул int groupCount()шумораи гурӯҳҳои забтшударо дар шакли ҳалкунанда бармегардонад. Ин рақам гурӯҳи махсуси забти рақами 0-ро ба назар намегирад, ки ба намунаи умумӣ мувофиқат мекунад.

  • Усул String group()аломатҳои мувофиқи қаблии пайдошударо бармегардонад. Барои гузориш додани ҷустуҷӯи бомуваффақияти сатри холӣ, ин усул сатри холиро бармегардонад. Агар ҳалкунанда то ҳол ҷустуҷӯро иҷро накарда бошад ё амалиёти ҷустуҷӯи қаблӣ ноком шавад, истисно партофта мешавад IllegalStateException.

  • Усул String group(int group)ба усули қаблӣ шабеҳ аст, ба истиснои он, ки он аломатҳои мувофиқи қаблии пайдошударо, ки бо рақами гурӯҳе, ки бо параметр муайян шудааст, бармегардонад group. Дар хотир доред, ки ин group(0)ба он баробар аст group(). Агар қолаб гурӯҳи забтшуда бо рақами додашуда надошта бошад, усул истисноро мепартояд IndexOutOfBoundsException. Агар ҳалкунанда то ҳол ҷустуҷӯро иҷро накарда бошад ё амалиёти ҷустуҷӯи қаблӣ ноком шавад, истисно партофта мешавад IllegalStateException.

  • Ин усул String group(String name)аломатҳои бозии қаблии пайдошударо, ки аз ҷониби гурӯҳи ном гирифта шудааст, бармегардонад. Агар номи гурӯҳи забтшуда дар қолаб набошад, истисно партофта мешавад IllegalArgumentException. Агар ҳалкунанда то ҳол ҷустуҷӯро иҷро накарда бошад ё амалиёти ҷустуҷӯи қаблӣ ноком шавад, истисно партофта мешавад IllegalStateException.

Мисоли зерин истифодаи groupCount()ва усулҳоро нишон медиҳад group(int group):
Pattern p = Pattern.compile("(.(.(.)))");
Matcher m = p.matcher("abc");
m.find();
System.out.println(m.groupCount());
for (int i = 0; i <= m.groupCount(); i++)
System.out.println(i + ": " + m.group(i));
Натиҷаҳои иҷро:
3
0: abc
1: abc
2: bc
3: c
Ифодаҳои муқаррарӣ дар Java, Қисми 4 - 2

Усулҳои муайян кардани мавқеъҳои бозӣ

Синф Matcherякчанд усулҳоро пешниҳод мекунад, ки мавқеъҳои ибтидоӣ ва охири мувофиқатро бармегардонанд:
  • Усул int start()мавқеи ибтидоии бозии қаблии пайдошударо бармегардонад. Агар ҳалкунанда то ҳол ҷустуҷӯро иҷро накарда бошад ё амалиёти ҷустуҷӯи қаблӣ ноком шавад, истисно партофта мешавад IllegalStateException.

  • Усул int start(int group)ба усули қаблӣ шабеҳ аст, аммо мавқеи ибтидоии мувофиқати қаблиро барои гурӯҳе, ки рақамаш бо параметр муайян шудааст, бармегардонад group. Агар қолаб гурӯҳи забтшуда бо рақами додашуда надошта бошад, усул истисноро мепартояд IndexOutOfBoundsException. Агар ҳалкунанда то ҳол ҷустуҷӯро иҷро накарда бошад ё амалиёти ҷустуҷӯи қаблӣ ноком шавад, истисно партофта мешавад IllegalStateException.

  • Усул int start(String name)ба усули қаблӣ монанд аст, аммо мавқеи ибтидоии бозии қаблиро, ки барои гурӯҳи бо номи name. Агар гурӯҳи забтшуда nameдар қолаб набошад, истисно партофта мешавад IllegalArgumentException. Агар ҳалкунанда то ҳол ҷустуҷӯро иҷро накарда бошад ё амалиёти ҷустуҷӯи қаблӣ ноком шавад, истисно партофта мешавад IllegalStateException.

  • Усул int end()мавқеъи аломати охирини мувофиқати қаблии ёфтшуда ва иловаи 1-ро бармегардонад. Агар мувофиқаткунанда ҳанӯз мувофиқат накарда бошад ё амалиёти ҷустуҷӯии қаблӣ ноком шавад, истисно партофта мешавад IllegalStateException.

  • Усул int end(int group)ба усули қаблӣ шабеҳ аст, аммо мавқеи охири мувофиқати қаблиро барои гурӯҳе, ки рақами он бо параметр муайян шудааст, бармегардонад group. Агар қолаб гурӯҳи забтшуда бо рақами додашуда надошта бошад, усул истисноро мепартояд IndexOutOfBoundsException. Агар ҳалкунанда то ҳол ҷустуҷӯро иҷро накарда бошад ё амалиёти ҷустуҷӯи қаблӣ ноком шавад, истисно партофта мешавад IllegalStateException.

  • Усул int end(String name)ба усули қаблӣ монанд аст, аммо мавқеи охири бозии қаблиро, ки барои гурӯҳи бо номи name. Агар гурӯҳи забтшуда nameдар қолаб набошад, истисно партофта мешавад IllegalArgumentException. Агар ҳалкунанда то ҳол ҷустуҷӯро иҷро накарда бошад ё амалиёти ҷустуҷӯи қаблӣ ноком шавад, истисно партофта мешавад IllegalStateException.

Мисоли зерин ду усули ҷойгиркунии мувофиқро нишон медиҳад, ки мавқеъҳои мувофиқати оғоз/охириро барои гурӯҳи сабти рақами 2 мебароранд:
Pattern p = Pattern.compile("(.(.(.)))");
Matcher m = p.matcher("abcabcabc");
while (m.find())
{
   System.out.println("Найдено " + m.group(2));
   System.out.println("  начинается с позиции " + m.start(2) +
                      " и заканчивается на позиции " + (m.end(2) - 1));
   System.out.println();
}
Натиҷаи ин мисол чунин аст:
Найдено bc
начинается с позиции 1 и заканчивается на позиции 2
Найдено bc
начинается с позиции 4 и заканчивается на позиции 5
Найдено bc
начинается с позиции 7 и заканчивается на позиции 8

Усулҳои синфи PatternSyntaxException

Мисоли синф PatternSyntaxExceptionхатои синтаксисиро дар ифодаи муқаррарӣ тавсиф мекунад. Чунин истисноро аз усулҳо compile()ва matches()синф мепартояд Patternва тавассути созандаи зерин сохта мешавад: PatternSyntaxException(String desc, String regex, int index) Ин созанда тавсифи муайяншуда ( desc), ифодаи муқаррарӣ ( regex) ва мавқеъро, ки дар он хатогии синтаксис рух додааст, нигоҳ медорад. Агар макони хатои синтаксиси номаълум бошад, арзиш indexба -1. Эҳтимол дорад, ба шумо ҳеҷ гоҳ лозим нест, ки намунаҳои PatternSyntaxException. Аммо, ҳангоми сохтани паёми хатогии форматшуда ба шумо лозим меояд, ки арзишҳои дар боло зикршударо истихроҷ кунед. Барои ин, шумо метавонед усулҳои зеринро истифода баред:
  • Усул String getDescription()тавсифи хатои синтаксисиро бармегардонад.
  • Усул int getIndex()ё мавқеъеро, ки дар он хатогӣ рух додааст, бар мегардонад ё -1, агар мавқеъ номаълум бошад.
  • Усул String getPattern()ифодаи муқаррарии беэътиборро бармегардонад.
Илова бар ин, усули меросӣ String getMessage()як сатри бисёрсатрро бо арзишҳои аз усулҳои қаблӣ баргардонидашуда дар баробари нишон додани визуалии дар куҷо хатогии синтаксис дар қолаб рух додааст, бармегардонад. Хатогии синтаксис чист? Инак як мисол: java RegexDemo (?itree Treehouse Дар ин ҳолат, мо фаромӯш кардем, ки мета аломати қавсро ( )) дар ифодаи парчами лона гузошташуда нишон диҳем. Ин аст он чизе ки аз ин хатогӣ ба даст меояд:
regex = (?itree
input = Treehouse
Неправильное регулярное выражение: Unknown inline modifier near index 3
(?itree
   ^
Описание: Unknown inline modifier
Позиция: 3
Неправильный шаблон: (?itree

Бо истифода аз API Regex барномаҳои муфиди ифодаи муқаррариро созед

Ифодаҳои муқаррарӣ ба шумо имкон медиҳанд, ки барномаҳои пуриқтидори коркарди матн эҷод кунед. Дар ин бахш, мо ба шумо ду барномаи қулайро нишон медиҳем, ки умедворем шуморо ба омӯзиши минбаъдаи дарсҳо ва усулҳои Regex API ташвиқ мекунанд. Замимаи дуюм Lexan-ро муаррифӣ мекунад: китобхонаи рамзҳои такрорӣ барои таҳлor лексикӣ. Ифодаҳои муқаррарӣ дар Java, Қисми 4 - 3

Ифодаҳо ва ҳуҷҷатҳои муқаррарӣ

Ҳуҷҷатгузорӣ яке аз вазифаҳои ҳатмӣ ҳангоми таҳияи нармафзори касбӣ мебошад. Хушбахтона, ифодаҳои муқаррарӣ метавонанд ба шумо дар бисёр ҷанбаҳои эҷоди ҳуҷҷатҳо кӯмак расонанд. Рамзи Рӯйхати 1 аз файли сарчашма сатрҳоеро, ки шарҳҳои яксаторӣ ва бисёрхатти C-ро дар бар мегиранд, ҷудо мекунад ва онҳоро ба файли дигар менависад. Барои кор кардани code, шарҳҳо бояд дар як сатр бошанд. Рӯйхат 1. Ҷустуҷӯи шарҳҳо
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class ExtCmnt
{
   public static void main(String[] args)
   {
      if (args.length != 2)
      {
         System.err.println("Способ применения: java ExtCmnt infile outfile");
         return;
      }

      Pattern p;
      try
      {
         // Следующий шаблон определяет многострочные комментарии,
         // располагающиеся в одной строке (например, /* одна строка */)
            // и однострочные комментарии (например, // Howая-то строка).
            // Комментарий может располагаться в любом месте строки.

         p = Pattern.compile(".*/\\*.*\\*/|.*//.*$");
      }
      catch (PatternSyntaxException pse)
      {
         System.err.printf("Синтаксическая ошибка в регулярном выражении: %s%n", pse.getMessage());
         System.err.printf("Описание ошибки: %s%n", pse.getDescription());
         System.err.printf("Позиция ошибки: %s%n", pse.getIndex());
         System.err.printf("Ошибочный шаблон: %s%n", pse.getPattern());
         return;
      }

      try (FileReader fr = new FileReader(args[0]);
           BufferedReader br = new BufferedReader(fr);
           FileWriter fw = new FileWriter(args[1]);
           BufferedWriter bw = new BufferedWriter(fw))
      {
         Matcher m = p.matcher("");
         String line;
         while ((line = br.readLine()) != null)
         {
            m.reset(line);
            if (m.matches()) /* Должна соответствовать вся строка */
            {
               bw.write(line);
               bw.newLine();
            }
         }
      }
      catch (IOException ioe)
      {
         System.err.println(ioe.getMessage());
         return;
      }
   }
}
Усули main()дар Рӯйхати 1 аввал дурустии синтаксиси сатри фармонро тафтиш мекунад ва сипас ифодаи муқаррариро тартиб медиҳад, ки барои ошкор кардани шарҳҳои яксара ва бисёрсатрӣ дар an objectи синф тарҳрезӣ шудааст Pattern. Агар ягон истисно ба миён наояд PatternSyntaxException, усул main()файли сарчашмаро мекушояд, файли мавриди ҳадафро эҷод мекунад, мувофиқкунандаро барои мувофиқ кардани ҳар як сатри хондашуда бо намуна ба даст меорад ва сипас файли сарчашмаро сатр ба сатр мехонад. Барои ҳар як сатр он бо намунаи шарҳ мувофиқ аст. Агар муваффақ бошад, усул main()сатрро (пас аз хати нав) ба файли мавриди ҳадаф менависад (мо мантиқи файли I/O-ро дар дарси ояндаи Java 101 фаро мегирем). Рӯйхати 1-ро ба таври зерин тартиб диҳед: javac ExtCmnt.java Барномаро бо файл ExtCmnt.javaҳамчун вуруд иҷро кунед: java ExtCmnt ExtCmnt.java out Шумо бояд натиҷаҳои зеринро дар файл ба даст оред:
// Следующий шаблон определяет многострочные комментарии,
 // располагающиеся в одной строке (например, /* одна строка */)
    // и однострочные комментарии (например, // Howая-то строка).
    // Комментарий может располагаться в любом месте строки.
p = Pattern.compile(".*/\\*.*\\*/|.*//.*$");
    if (m.matches()) /* Должна соответствовать вся строка */
Дар сатри намуна .*/\\*.*\\*/|.*//.*$, мета аломати қубур |ҳамчун оператори мантиқии Ё амал мекунад ва нишон медиҳад, ки мувофиқаткунанда бояд операнди чапи сохтори ифодаи муқаррарии додашударо барои ёфтани мувофиқат дар матни мувофиқ истифода барад. Дар сурати мавҷуд набудани мувофиқат, мувофиқкунанда операнди дурусти сохтори ифодаи муқаррарии додашударо барои кӯшиши ҷустуҷӯи дигар истифода мебарад (мета аломатҳои қавс дар гурӯҳи гирифташуда инчунин оператори мантиқиро ташкил медиҳанд). Ифодаҳои муқаррарӣ дар Java, Қисми 5
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION