欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java正則提取中括號(hào)中的內(nèi)容操作示例

 更新時(shí)間:2018年06月01日 10:05:26   作者:tianpy5  
這篇文章主要介紹了Java正則提取中括號(hào)中的內(nèi)容操作,涉及Java針對(duì)字符串的正則匹配、轉(zhuǎn)換、遍歷等相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Java正則提取中括號(hào)中的內(nèi)容操作。分享給大家供大家參考,具體如下:

曾經(jīng)在工作中遇到一個(gè)問(wèn)題,就是需要提取字符串中每一個(gè)中括號(hào)里的內(nèi)容,在網(wǎng)上搜了一下,發(fā)現(xiàn)用正則表達(dá)式可以提取中括號(hào)中的內(nèi)容,具體實(shí)現(xiàn)如下:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ExtractMessage {
  public static void main(String[] args) {
    String msg = "PerformanceManager[第1個(gè)中括號(hào)]Product[第2個(gè)中括號(hào)]<[第3個(gè)中括號(hào)]79~";
    List<String> list = extractMessageByRegular(msg);
    for (int i = 0; i < list.size(); i++) {
      System.out.println(i+"-->"+list.get(i));
    }
  }
  /**
   * 使用正則表達(dá)式提取中括號(hào)中的內(nèi)容
   * @param msg
   * @return
   */
  public static List<String> extractMessageByRegular(String msg){
    List<String> list=new ArrayList<String>();
    Pattern p = Pattern.compile("(\\[[^\\]]*\\])");
    Matcher m = p.matcher(msg);
    while(m.find()){
      list.add(m.group().substring(1, m.group().length()-1));
    }
    return list;
  }
}

輸出結(jié)果如下:

0-->第1個(gè)中括號(hào)
1-->第2個(gè)中括號(hào)
2-->第3個(gè)中括號(hào)

這樣很快就完成了代碼的工作,但是后來(lái)發(fā)現(xiàn)如果中括號(hào)中還包含中括號(hào),正則表達(dá)式就失去作用了,我不得不自己想辦法解決,經(jīng)過(guò)研究終于招到了解決方法,具體實(shí)現(xiàn)如下:

package com.perry.test;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ExtractMessage {
  public static void main(String[] args) {
    String msg = "PerformanceManager[第1個(gè)中括號(hào)]Product[第2個(gè)中括號(hào)[中括號(hào)中包含中括號(hào)]]<[第3個(gè)中括號(hào)]79~";
    List<String> list = extractMessage(msg);
    for (int i = 0; i < list.size(); i++) {
      System.out.println(i+"-->"+list.get(i));
    }
  }
  /**
   * 提取中括號(hào)中內(nèi)容,忽略中括號(hào)中的中括號(hào)
   * @param msg
   * @return
   */
  public static List<String> extractMessage(String msg) {
    List<String> list = new ArrayList<String>();
    int start = 0;
    int startFlag = 0;
    int endFlag = 0;
    for (int i = 0; i < msg.length(); i++) {
      if (msg.charAt(i) == '[') {
        startFlag++;
        if (startFlag == endFlag + 1) {
          start = i;
        }
      } else if (msg.charAt(i) == ']') {
        endFlag++;
        if (endFlag == startFlag) {
          list.add(msg.substring(start + 1, i));
        }
      }
    }
    return list;
  }
}

輸出結(jié)果如下:

0-->第1個(gè)中括號(hào)
1-->第2個(gè)中括號(hào)[中括號(hào)中包含中括號(hào)]
2-->第3個(gè)中括號(hào)

主要思路就是遍歷字符串,在中括號(hào)的開(kāi)始和結(jié)束位置做標(biāo)記計(jì)數(shù),如果是中括號(hào)開(kāi)始位置對(duì)應(yīng)的結(jié)束位置,那么開(kāi)始位置和結(jié)束位置的計(jì)數(shù)是一致的,這樣截取的就是一個(gè)完整的中括號(hào)的內(nèi)容。

PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:

JavaScript正則表達(dá)式在線(xiàn)測(cè)試工具:
http://tools.jb51.net/regex/javascript

正則表達(dá)式在線(xiàn)生成工具:
http://tools.jb51.net/regex/create_reg

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java正則表達(dá)式技巧大全》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Java秒殺系統(tǒng):web層詳解

    Java秒殺系統(tǒng):web層詳解

    本文主要介紹了如何設(shè)計(jì)一個(gè)秒殺系統(tǒng)的web層相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧,希望能夠給你帶來(lái)幫助
    2021-10-10
  • SpringBoot實(shí)現(xiàn)模塊日志入庫(kù)的項(xiàng)目實(shí)踐

    SpringBoot實(shí)現(xiàn)模塊日志入庫(kù)的項(xiàng)目實(shí)踐

    本文主要介紹了SpringBoot實(shí)現(xiàn)模塊日志入庫(kù)的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 深入理解java中i++和++i的區(qū)別

    深入理解java中i++和++i的區(qū)別

    下面小編就為大家?guī)?lái)一篇深入理解java中i++和++i的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • 深入探究Java?@MapperScan實(shí)現(xiàn)原理

    深入探究Java?@MapperScan實(shí)現(xiàn)原理

    之前是直接在Mapper類(lèi)上面添加注解@Mapper,這種方式要求每一個(gè)mapper類(lèi)都需要添加此注解,麻煩。通過(guò)使用@MapperScan可以指定要掃描的Mapper類(lèi)的包的路徑,這篇文章深入探究Java?@MapperScan的實(shí)現(xiàn)原理
    2023-01-01
  • Java設(shè)計(jì)模式之策略模式

    Java設(shè)計(jì)模式之策略模式

    這篇文章介紹了Java設(shè)計(jì)模式之策略模式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Java中字符串常見(jiàn)題之String相關(guān)講解

    Java中字符串常見(jiàn)題之String相關(guān)講解

    今天小編就為大家分享一篇關(guān)于Java中字符串常見(jiàn)題之String相關(guān)講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Java中i++的一些問(wèn)題總結(jié)

    Java中i++的一些問(wèn)題總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java中i++的一些問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Springboot+redis+Interceptor+自定義annotation實(shí)現(xiàn)接口自動(dòng)冪等

    Springboot+redis+Interceptor+自定義annotation實(shí)現(xiàn)接口自動(dòng)冪等

    本篇文章給大家介紹了使用springboot和攔截器、redis來(lái)優(yōu)雅的實(shí)現(xiàn)接口冪等,對(duì)于冪等在實(shí)際的開(kāi)發(fā)過(guò)程中是十分重要的,因?yàn)橐粋€(gè)接口可能會(huì)被無(wú)數(shù)的客戶(hù)端調(diào)用,如何保證其不影響后臺(tái)的業(yè)務(wù)處理,如何保證其只影響數(shù)據(jù)一次是非常重要的,感興趣的朋友跟隨小編一起看看吧
    2019-07-07
  • JVM實(shí)戰(zhàn)系列之CPU100%和內(nèi)存100%排查

    JVM實(shí)戰(zhàn)系列之CPU100%和內(nèi)存100%排查

    本文主要介紹了JVM實(shí)戰(zhàn)系列之CPU100%和內(nèi)存100%排查,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • windows如何使用bat腳本后臺(tái)啟動(dòng)/停止和重啟jar包服務(wù)

    windows如何使用bat腳本后臺(tái)啟動(dòng)/停止和重啟jar包服務(wù)

    這篇文章主要介紹了windows使用bat腳本后臺(tái)啟動(dòng)/停止和重啟jar包服務(wù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論