Rumah > Java > javaTutorial > teks badan

Program Java untuk mengekstrak rentetan yang dikelilingi oleh petikan tunggal daripada rentetan yang lebih besar menggunakan ungkapan biasa

PHPz
Lepaskan: 2023-09-16 16:41:02
ke hadapan
1032 orang telah melayarinya

Program Java untuk mengekstrak rentetan yang dikelilingi oleh petikan tunggal daripada rentetan yang lebih besar menggunakan ungkapan biasa

Ungkapan Biasa atau Ungkapan Biasa ialah bahasa yang digunakan untuk padanan corak dan manipulasi rentetan. Ia terdiri daripada jujukan aksara yang mentakrifkan corak carian dan boleh digunakan untuk melaksanakan operasi seperti mencari, menggantikan dan juga mengesahkan input teks. Ungkapan biasa terdiri daripada urutan aksara dan simbol yang membentuk corak carian.

Dalam artikel ini, kita akan belajar cara menulis program Java untuk mengekstrak rentetan petikan tunggal daripada rentetan yang lebih besar menggunakan ungkapan biasa.

Java menyediakan sokongan untuk ungkapan biasa melalui pakej java.util.regex. Kelas corak mewakili ungkapan biasa yang disusun, manakala kelas pemadan boleh digunakan untuk memadankan corak dengan rentetan input yang diberikan.

Satu rentetan tunggal disertakan dalam petikan tunggal

Dalam contoh di bawah, kami akan mentakrifkan rentetan input dan corak ungkapan biasa yang ingin kami padankan dahulu. Corak "(_+?)" sepadan dengan mana-mana jujukan aksara yang disertakan dalam petikan tunggal dan bahagian _*? Memadankan mana-mana aksara 0 atau lebih kali, tetapi sesedikit mungkin supaya corak yang lain sepadan.

Kami kemudian mencipta objek Matcher berdasarkan corak untuk digunakan pada rentetan input dengan bantuan kaedah cari. Jika corak sepadan, kami mengekstrak rentetan padanan menggunakan kaedah kumpulan() dengan parameter 1, yang mewakili kumpulan penangkapan pertama dalam corak. Kelemahan kaedah ini ialah ia tidak menangkap semua kumpulan subrentetan petikan tunggal.

Contoh

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringExtractor {
   public static void main(String[] args) {
      String input = "This is a 'single quote' enclosed string";
      Pattern pattern = Pattern.compile("'(.*?)'");
      Matcher matcher = pattern.matcher(input);
        
      if (matcher.find()) {
         String extractedString = matcher.group(1);
         System.out.println(extractedString);
      }
   }
}
Salin selepas log masuk

Output

single quote
Salin selepas log masuk

Berbilang subrentetan disertakan dalam petikan tunggal

Kaedah di atas mempunyai satu kelemahan utama, iaitu terlalu mudah untuk mengekstrak berbilang subrentetan petikan tunggal daripada rentetan input dan hanya mengekstrak kejadian pertama. Ini adalah versi terkini dan lanjutan bagi kaedah sebelumnya kerana ia mampu mengekstrak berbilang peristiwa. Kami menggunakan gelung sementara untuk mengulang dan terus mencari padanan sehingga tiada padanan yang tinggal dalam rentetan input. Senarai padanan digunakan untuk menyimpan semua rentetan yang diekstrak dan dikembalikan dengan kaedah ini. Kaedah utama menunjukkan cara menggunakan kaedah extractStringsWithRegex() yang dikemas kini untuk mengekstrak semua rentetan petikan tunggal.

Contoh

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.ArrayList;
import java.util.List;
public class StringExtractor {    
   public static List<String> extractStringsWithRegex(String input) {
      // This function takes string as input, iterates over to search for regex matches
      // and stores them in a List named matches which is finally returned in the end
      Pattern pattern = Pattern.compile("'(.*?)'");
      Matcher matcher = pattern.matcher(input);
      List<String> matches = new ArrayList<>();
      while (matcher.find()) {
         matches.add(matcher.group(1));
      }
      return matches;
   }   
   public static void main(String[] args) {
      String input = "This is a 'test' string with 'multiple' 'single quote' enclosed 'words'";
      List<String> matches = extractStringsWithRegex(input);
      for (String match : matches) {
         System.out.println(match);
      }
   }
}
Salin selepas log masuk

Output

test
multiple
single quote
words
Salin selepas log masuk

Terdapat beberapa kelebihan dan kekurangan program java untuk mengekstrak rentetan tertutup petikan tunggal daripada rentetan yang lebih besar menggunakan ungkapan biasa seperti yang ditunjukkan di bawah.

Kelebihan

  • Ekspresi biasa sangat berkuasa dan boleh memadankan rentetan yang disertakan dalam petikan tunggal atau corak yang lebih kompleks.

  • Kelas Matcher membekalkan kami kaedah tambahan untuk mengendalikan rentetan yang dipadankan, seperti mencari indeks permulaan dan penamat sesuatu perlawanan.

Keburukan

  • Ungkapan biasa boleh menjadi lebih sukar untuk ditulis dan difahami daripada kaedah lain.

  • Ekspresi biasa boleh menjadi lebih perlahan berbanding kaedah lain, terutamanya untuk rentetan input besar atau corak kompleks.

Kesimpulan

Terdapat pelbagai kaedah untuk mengekstrak rentetan yang disertakan dalam petikan tunggal, tetapi kaedah yang paling biasa adalah menggunakan kaedah ungkapan biasa, split() dan subrentetan(). Ungkapan biasa ialah pilihan yang berkuasa dan fleksibel kerana ia boleh mengendalikan corak yang kompleks, tetapi boleh memakan masa yang sangat lama pada rentetan yang sangat besar. Apabila menggunakan ungkapan biasa, kelas Pattern digunakan untuk mewakili corak, dan kelas Matcher digunakan untuk menggunakan corak pada rentetan input dan kemudian mengekstrak teks yang sepadan. Ungkapan biasa mempunyai pelbagai kes penggunaan, daripada mengesahkan data input pengguna kepada memanipulasi teks. Setiap kali bekerja dengan ungkapan biasa, adalah penting untuk mereka bentuk dan menguji corak dengan teliti untuk memastikan ia sepadan dengan teks yang diperlukan dan mengendalikan semua kemungkinan kes tepi dengan baik.

Atas ialah kandungan terperinci Program Java untuk mengekstrak rentetan yang dikelilingi oleh petikan tunggal daripada rentetan yang lebih besar menggunakan ungkapan biasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan