day50-正則表達式01

来源:https://www.cnblogs.com/liyuelian/archive/2022/10/22/16817386.html
-Advertisement-
Play Games

正則表達式01 5.1正則表達式的作用 正則表達式的便利 在一篇文章中,想要提取相應的字元,比如提取文章中的所有英文單詞,提取文章中的所有數字等。 傳統方法是:使用遍歷的方式,對文本中的每一個字元進行ASCII碼的對比,如果ASCII碼處於英文字元的範圍,就將其截取下來,再看後面是否有連續的字元,將 ...


正則表達式01

5.1正則表達式的作用

正則表達式的便利

在一篇文章中,想要提取相應的字元,比如提取文章中的所有英文單詞,提取文章中的所有數字等。

  1. 傳統方法是:使用遍歷的方式,對文本中的每一個字元進行ASCII碼的對比,如果ASCII碼處於英文字元的範圍,就將其截取下來,再看後面是否有連續的字元,將連續的字元拼接成一個單詞。這種方式代碼量大,且效率不高。
  2. 使用正則表達式
package li.regexp;

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

//體驗正則表達式的便利
public class Regexp_ {
    public static void main(String[] args) {
        //假設有如下文本
        String content = "1995年,互聯網的蓬勃發展給了Oak機會。業界為了使死板、單調的靜態網頁能夠“靈活”起來," +
                "急需一種軟體技術來開發一種程式,這種程式可以通過網路傳播並且能夠跨平臺運行。於是,世界各大IT企" +
                "業為此紛紛投入了大量的人力、物力和財力。這個時候,Sun公司想起了那個被擱置起來很久的Oak,並且" +
                "重新審視了那個用軟體編寫的試驗平臺,由於它是按照嵌入式系統硬體平臺體繫結構進行編寫的,所以非常" +
                "小,特別適用於網路上的傳輸系統,而Oak也是一種精簡的語言,程式非常小,適合在網路上傳輸。Sun公" +
                "司首先推出了可以嵌入網頁並且可以隨同網頁在網路上傳輸的Applet(Applet是一種將小程式嵌入到網" +
                "頁中進行執行的技術),並將Oak更名為Java。5月23日,Sun公司在Sun world會議上正式發佈Java和" +
                "HotJava瀏覽器。IBM、Apple、DEC、Adobe、HP、Oracle、Netscape和微軟等各大公司都紛紛停止" +
                "了自己的相關開發項目,競相購買了Java使用許可證,併為自己的產品開發了相應的Java平臺。";

        String content2 = "無類域間路由(CIDR,Classless Inter-Domain Routing)地址根據網路拓撲來分配,可以" +
                "將連續的一組網路地址分配給一家公司,並使整組地址作為一個網路地址(比如使用超網技術),在外部路由表上" +
                "只有一個路由表項。這樣既解決了地址匱乏問題,又解決了路由表膨脹的問題。另外,CIDR還將整個世界分為四" +
                "個地區,給每個地區分配了一段連續的C類地址,分別是:歐洲(194.0.0.0~195.255.255.255)、北美(19" +
                "8.0.0.0~199.255.255.255)、中南美(200.0.0.0~201.255.255.255)和亞太(202.0.0.0~203.2" +
                "55.255.255)。這樣,當一個亞太地區以外的路由器收到前8位為202或203的數據報時,它只需要將其放到通向亞" +
                "太地區的路由即可,而對後24位的路由則可以在數據報到達亞太地區後再進行處理,這樣就大大緩解了路由表膨脹的問題";

        //正則表達式來完成
        // (1)先創建一個Pattern對象,模式對象,可以理解成就是一個正則表達式對象
        //Pattern pattern = Pattern.compile("[a-zA-Z]+");//提取文章中的所有英文單詞
        //Pattern pattern = Pattern.compile("[0-9]+");//提取文章中的所有數字
        //Pattern pattern = Pattern.compile("([0-9]+)|([a-zA-Z]+)");//提取文章中的所有的英文單詞和數字
        Pattern pattern = Pattern.compile("\\d+\\.\\d+\\.\\d+\\.\\d+");//提取文章中的ip地址

        // (2)創建一個匹配器對象
        // 理解:就是 matcher 匹配器按照pattern(模式/樣式),到content文本中去匹配
        // 找到就返回true,否則就返回false(如果返回false就不再匹配了)
        Matcher matcher = pattern.matcher(content2);
        // (3)可以開始迴圈匹配
        while (matcher.find()) {
            //匹配到的內容和文本,放到 m.group(0)
            System.out.println("找到:" + matcher.group(0));
        }
    }
}

提取所有英文單詞:

image-20221022153358877 image-20221022153426008

提取所有數字:

image-20221022154139428

提取ip地址:

image-20221022161053093

正則表達式是處理文本的利器

  • 再提出幾個問題
    • 在程式中如何驗證用戶輸入的郵件信息是否符合電子郵件的格式?
    • 如何驗證輸入的電話號碼是符合手機號格式?

為瞭解決上述問題,java提供了正則表達式技術(regular expression / regexp),專門用於處理類似的文本問題簡單地說,正則表達式是對字元串執行 模式匹配 的技術。

5.2基本介紹

  • 介紹
  1. 一個正則表達式,就是用某種模式去匹配字元串的一個公式。

    它們看上去奇怪而複雜,但經過練習後,你就會發現這些複雜的表達式寫起來還是相當簡單的。而且,一旦弄懂它們,就能將數小時辛苦而且容易出錯的文本處理工作縮短在幾分鐘甚至幾秒內完成。

  2. 正則表達式不是java獨有的,實際上很多編程語言都支持正則表達式進行字元串操作,且它們的匹配規則大同小異。

5.3底層實現

實例分析:

給出一段字元串文本,請找出所有四個數字連在一起的子串===>分析底層實現

package li.regexp;

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

//分析java的正則表達式的底層實現**
public class RegTheory {
    public static void main(String[] args) {
        String content="1998年12月8日,第二代Java平臺的企業版J2EE發佈。1999年6月,Sun公司發佈了" +
                "第二代Java平臺(簡稱為Java2)的3個版本:J2ME(Java2 Micro Edition,Java2平臺的微型" +
                "版),應用於移動、無線9889+及有限資源的環境;J2SE(Java 2 Standard Edition,Java 2平臺的" +
                "標準版),應用於桌面環境;J2EE(Java 2Enterprise Edition,Java 2平臺的企業版),應" +
                "用於基於Java的應用伺服器。Java 2平臺的發佈,是Java發展過程中最重要的一個裡程碑,標志著J" +
                "ava的應用開始普及。3443";

        //請找出所有四個數字連在一起的子串
        //說明:
        // 1.\\d表示一個任意的數字
        String regStr="\\d\\d\\d\\d";
        //2.創建一個模式對象
        Pattern pattern = Pattern.compile(regStr);
        //3.創建匹配器
        //說明:創建匹配器matcher,按照前面寫的 正則表達式的規則 去匹配 content字元串
        Matcher matcher = pattern.matcher(content);
        //4.開始匹配
        while (matcher.find()){
            System.out.println("匹配:"+matcher.group(0));
        }
    }
}
image-20221022165943002

5.3.1match.find()

  • match.find()完成的任務:
  1. 根據指定的規則,定位滿足規則的子字元串(比如1998)

  2. 找到後,將"1998"子字元串開始的索引記錄到 matcher對象的屬性 int[] groups數組中的groups[0];把該子串的結束索引再+1的值記錄到 groups[1]

    此時groups[0]=0,groups[1]=4

image-20221022172106161
  1. 同時記錄oldLast的值為 子串的結束索引+1 即4,這樣做的原因是:下次執行find方法時,就從該下標4開始匹配

    image-20221022172130450

5.3.2matcher.group(0)

//源碼:
public String group(int group) {
      if (first < 0)
          throw new IllegalStateException("No match found");
      if (group < 0 || group > groupCount())
          throw new IndexOutOfBoundsException("No group " + group);
      if ((groups[group*2] == -1) || (groups[group*2+1] == -1))
          return null;
      return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();
}

根據傳入的參數group=0,計算groups[0 * 2] 和 groups[0 * 2 + 1] 的記錄的位置,從content截取子字元串返回

此時groups[0]=0,groups[1]=4,註意:截取的位置為[0,4) ,包含 0 但是不包含索引為 4 的位置


  • 如果再次指向find方法,仍然按照上面的分析去執行:

    比如下一個匹配的子字元串是“1999”,首先,將該字元串的開始索引的值,以及結束索引加1的值記錄到matcher屬性的groups數組中(會先將上次存儲在groups數組中的數值清空)

    然後記錄oldLast的值為 子串的結束索引+1,下次執行find方法時,就從該下標35開始匹配

    groups[0]=31,groups[1]=35,oldLsat=35

    image-20221022172732999 image-20221022173129622

    然後執行matcher.group(0)方法,根據傳入的參數group=0,計算groups[0 * 2] 和 groups[0 * 2 + 1] 的記錄的位置,即[31,35),從content截取子字元串返回

5.3.3分組

什麼是分組?

在正則表達式中有括弧(),表示分組,第一個括弧()表示第一組,第二個括弧()表示第二組....

實例代碼:

package li.regexp;

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

//分析java的正則表達式的底層實現**
public class RegTheory {
    public static void main(String[] args) {
        String content="1998年12月8日,第二代Java平臺的企業版J2EE發佈。1999年6月,Sun公司發佈了" +
                "第二代Java平臺(簡稱為Java2)的3個版本:J2ME(Java2 Micro Edition,Java2平臺的微型" +
                "版),應用於移動、無線及9889有限資源的環境;J2SE(Java 2 Standard Edition,Java 2平臺的" +
                "標準版),應用於桌面環境;J2EE(Java 2Enterprise Edition,Java 2平臺的企業版),應" +
                "用於基於Java的應用伺服器。Java 2平臺的發佈,是Java發展過程中最重要的一個裡程碑,標志著J" +
                "ava的應用開始普及。3443";

        //請找出所有四個數字連在一起的子串
        //說明:
        // 1.\\d表示一個任意的數字
        String regStr="(\\d\\d)(\\d\\d)";
        //2.創建一個模式對象
        Pattern pattern = Pattern.compile(regStr);
        //3.創建匹配器
        //說明:創建匹配器matcher,按照前面寫的 正則表達式的規則 去匹配 content字元串
        Matcher matcher = pattern.matcher(content);
        //4.開始匹配

        while (matcher.find()){
            System.out.println("匹配:"+matcher.group(0));
            System.out.println("第1組括弧()匹配到的值="+matcher.group(1));
            System.out.println("第2組括弧()匹配到的值="+matcher.group(2));
        }
    }
}

以上面的代碼為例:

  • match.find():

1.根據指定的規則,定位滿足規則的子字元串(比如"1998")

2.1找到後,將"1998"子字元串開始的索引位置記錄到 matcher對象的屬性 int[] groups數組中,把該子串的結束索引+1的值記錄到 groups[1] 中

此時 groups[0]=0 ;groups[1] = 4

2.2 記錄第一組括弧()匹配到的字元串("19")的位置 : groups[2]=0 , groups[3]=2

2.3 記錄第二組括弧()匹配到的字元串("98")的位置 : groups[4]=2 , groups[5]=4

如果有更多的分組就以此類推

索引下標是指:匹配的字元串在整文本或字元串中的位置,索引下標從0開始

驗證:

在程式中打上斷點,點擊debug調試:

image-20221022182722396

可以看到剛開始時,groups數組的所有值都是-1

image-20221022180849409

點擊step over,可以看到groups數組的變化如下:

image-20221022182336862
//源碼:
public String group(int group) {
      if (first < 0)
          throw new IllegalStateException("No match found");
      if (group < 0 || group > groupCount())
          throw new IndexOutOfBoundsException("No group " + group);
      if ((groups[group*2] == -1) || (groups[group*2+1] == -1))
          return null;
      return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();
}

在源碼中,返回語句 return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();

中,[group * 2] 和 [group * 2 + 1]計算的就是groups數組的下標位置

如果我們想要取出第一組括弧匹配的子字元串,即groups下標為[2]和[3],只需要將傳入的參數改為1即可

groups[1 * 2]=groups[2] , groups[1 * 2 + 1]=groups[3]

取出第二組括弧匹配的字元串同理,將傳入的參數改為2即可

groups[2 * 2]=groups[4] , groups[2 * 2 + 1]=groups[5]

image-20221022183846495

小結:

  1. 如果正則表達式有括弧(),即分組
  2. 取出匹配的字元串規則如下:
  3. matcher.group(0) 表示匹配到的子字元串
  4. matcher.group(1) 表示匹配到的子字元串的第1組字串
  5. matcher.group(2) 表示匹配到的子字元串的第2組字串
  6. 以此類推,註意分組的數不能越界

5.4正則表達式語法

  • 基本介紹

    如果想要靈活地運用正則表達式,必須瞭解其中各種元字元(Metacharacter)的功能,元字元從功能上大致分為:

    1. 限定符
    2. 選擇匹配符
    3. 分組組合和反向引用符
    4. 特殊字元
    5. 字元匹配符
    6. 定位符

5.4.1元字元-轉義符 \\\

\\符號的說明:在我們使用正則表達式去檢索某些特殊字元時,需要用到轉義符號\\,否則檢索不到結果,甚至會報錯。

註意:在Java的正則表達式中,兩個\\表示其他語言中的一個\

需要用到轉義符號的字元有如下:

. * + () $ / \ ? [] ^ {}

例子:

package li.regexp;

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

//演示轉義字元的使用
public class RegExp02 {
    public static void main(String[] args) {
        String content = "abc$(a.bc(123(";
        //匹配 ( ==> \\(
        //匹配 ( ==> \\.
        //String regStr = "\\(";
        String regStr = "\\.";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while (matcher.find()) {
            System.out.println("找到:" + matcher.group(0));
        }
    }
}
image-20221022190923789 image-20221022191645072

5.4.2元字元-字元匹配符

image-20221022200646508

image-20221022200918872

  • 應用實例
  1. [a-z]說明:

    [a-z]表示可以匹配 a-z 之間任意的一個字元

    [A-Z] 表示可以匹配 A-Z 之間任意的一個字元

    [0-9] 表示可以匹配 0-9 之間任意的一個字元

    比如[a-z]、[A-Z]去匹配“a11c8”會得到什麼結果?結果是:a、c

  2. java正則表達式預設是區分大小寫的,如何實現不區分大小寫?

    • (?i)abc表示abc都不區分大小寫
    • a(?i)bc表示bc不區分大小寫
    • a((?i)b)c表示只有b不區分大小寫
    • Pattern pattern = Pattern.compile(regStr,Pattern.CASE_INSENSITIVE);
  3. [^a-z]說明:

    [^a-z]表示可以匹配不是a-z中的任意一個字元

    [^A-Z]表示可以匹配不是A-Z中的任意一個字元

    [^0-9]表示可以匹配不是0-1中的任意一個字元

    如果用 [^a-z]去匹配“a11c8”會得到什麼結果?結果:1、1、8

    用 [^a-z]{2}又會得到什麼結果?結果是:11

  4. [abcd]表示可以匹配abcd中的任意一個字元

  5. [^abcd]表示可以匹配不是abcd中的任意一個字元

  6. \\d表示可以匹配0-9的任意一個數字,相當於[0-9]

  7. \\D表示可以匹配不是0-9的任意一個數字,相當於[^0-9],即匹配非數字字元

  8. \\w表示可以匹配任意英文字元、數字和下劃線,相當於[a-zA-Z0-9_]

  9. \\W相當於[^a-zA-Z0-9_],與\\w相反

  10. \\s匹配任何空白字元(空格,製表符等)

  11. \\S匹配任何非空白字元,與\\s相反

  12. .匹配除\n\r之外的所有字元,如果要匹配.本身則需要使用\\

package li.regexp;

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

//演示字元匹配符的使用
public class RegExp03 {
    public static void main(String[] args) {
        String content = "a1 1\r@c^8ab_c\nA BC\r\n";
        //String regStr = "[a-z]";//匹配 a-z 之間任意的一個字元
        //String regStr = "[A-Z]";//匹配 A-Z 之間任意的一個字元
        //String regStr = "[0-9]";//匹配 0-9 之間任意的一個字元
        //String regStr = "abc";//匹配 abc 字元串[預設區分大小寫]
        //String regStr = "(?i)abc";//匹配 abc 字元串[不區分大小寫]
        //String regStr = "[^a-z]";//匹配不在 a-z 之間任意的一個字元
        //String regStr = "[^0-9]";//匹配不在 0-9 之間任意的一個字元
        //String regStr = "[abcd]";//匹配在 abcd 中任意的一個字元
        //String regStr = "\\D";//匹配不在 0-9 中的任意的一個字元[匹配非數字字元]
        //String regStr = "\\w";//匹配任意英文字元、數字和下劃線
        //String regStr = "\\W";//\[^a-zA-Z0-9_]
        //String regStr = "\\s";//匹配任何空白字元(空格,製表符等)
        //String regStr = "\\S";//匹配任何非空白字元
        String regStr = ".";//.匹配除\n之外的所有字元,如果要匹配.本身則需要使用\\

        //說明:當創建Pattern對象時,指定Pattern.CASE_INSENSITIVE,表示匹配是不區分字母大小寫的
        //Pattern pattern = Pattern.compile(regStr,Pattern.CASE_INSENSITIVE);
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while (matcher.find()) {
            System.out.println("找到:" + matcher.group(0));
        }
    }
}

5.4.3元字元-選擇匹配符

在匹配某個字元串的時候是選擇性的,即:既可以匹配這個,又可以匹配那個,這時需要用到選擇匹配符號|

image-20221022212114116

例子:

package li.regexp;

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

public class RegExp04 {
    public static void main(String[] args) {
        String content ="hangshunping 韓 寒冷";
        String regStr="han|韓|寒";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while (matcher.find()) {
            System.out.println("找到:" + matcher.group(0));
        }
    }
}
image-20221022212647231

5.4.4元字元-限定符

用於指定其前面的字元和組合項連續出現多少次

image-20221022212909851


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目描述:判斷字元串中重覆次數最多的字元 // 解決思路: // 1.判斷字元重覆的方法 // 創建空數組,利用鍵值對形式對每個字元進行計數 // 用到 採用for迴圈結合if判斷 對象[鍵] 是否有值,無則undefined // arr.charAt(i)取得arr中i索引號下的元素 // 2. ...
  • 你需要知道的4個資料庫擴展解決方案 你已經用一個直觀的、用戶友好的用戶界面啟動了你的應用程式。但是,如果你的應用程式遇到負載問題,這將使你的終端客戶在使用它時感到沮喪。很有可能問題不在應用程式內部,而是在資料庫。根據一項調查,38%的資料庫專業人員報告說資料庫停機是讓他們夜不能寐的重要問題。停機可能 ...
  • 背景 相信大家看到這個文章對消息伺服器已經不陌生了,筆者也是在平日無聊想著自己編寫一套關於RockerMQ 的消息灰度框架的時候,準備本地搭建一個RockerMQ服務環境時遇到了一個頭疼的問題。在執行RockerMQ官網的Topic創建的時候(sh bin/mqadmin updatetopic - ...
  • 前言 記憶體木馬,就是在記憶體中運行的木馬病毒,沒有代碼實體。記憶體木馬有著強隱蔽性,排查困難,殺不死(俗稱不死馬)的特點。 網路安全行業,有著很強的木桶效應。系統對抗黑帽,勝負取決於安全最薄弱的環節。黑帽對抗白帽,勝負取決於攻擊水平和和毀屍滅跡隱蔽的水平。 正文 本文不討論是由於任意文件上傳還是近源攻擊 ...
  • Spring Cloud Eureka源碼分析的筆記,針對多個方法都有記錄,主要是方便自己對源碼部分的追溯,包括裡面的亮點設計的總結與源碼分析 ...
  • 三大特性 封裝 利用抽象數據類型將數據和基於數據的操作封裝在一起,使其構成一個不可分割的獨立實體。數據被保護在抽象數據類型的內部,儘可能地隱藏內部的細節,只保留一些對外介面使之與外部發生聯繫。用戶無需知道對象內部的細節,但可以通過對象對外提供的介面來訪問該對象。 優點: 減少耦合: 可以獨立地開發、 ...
  • 寫在前面 Redis 是一種 NoSQL 資料庫,包含多種數據結構、支持網路、基於記憶體、可選持久性的鍵值對存儲資料庫,在我們的日常開發中會經常使用 Redis 來解決許多問題,比如排行榜、消息隊列系統、計數器 以及 緩存系統等。 在作為緩存使用時,不可避免的會遇到緩存穿透、緩存雪崩、緩存擊穿(熱點 ...
  • pandas的下載 使用命令下載: pip install pandas 或者自行下載whl文件安裝 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 創建DataFrame數據 pd_data = pd.DataFrame({ "name":["小明","小紅 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...