Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Java: ลบตัวเลขทั้งหมดในสตริง ยกเว้น 1 และ 2

วิธีลบตัวเลขทั้งหมดในสตริง ยกเว้น 1 และ 2:

  1. Regex (?<!\\d)1(?!\\d) จับคู่เลข 1 ที่ไม่ติดตัวเลขอื่น (standalone)
  2. Regex (?<!\\d)2(?!\\d) จับคู่เลข 2 standalone
  3. แทนที่ 1 → "one", 2 → "two" แล้วลบตัวเลขอื่นๆ ด้วย \\s*\\d+

ตัวอย่าง

import java.util.Scanner;

public class RegexExample {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a String");
        String input = sc.nextLine();
        
        // จับคู่ 1 และ 2 ที่เป็นตัวเดียว (ไม่ติดตัวเลขอื่น)
        String regex1 = "(?

ผลลัพธ์

Enter a String: sample 1 2 3 4 5 6
Result: sample one two

อธิบาย Regex

  • (?<!\\d) - Negative lookbehind: ไม่มีตัวเลขก่อนหน้า
  • (?!\\d) - Negative lookahead: ไม่มีตัวเลขถัดไป
  • (?<!\\d)1(?!\\d) → จับคู่ "1" ที่แยกจากตัวเลขอื่น (ไม่ใช่ส่วนหนึ่งของ 12, 21, 123)
  • \\s*\\d+ - whitespace ตามด้วยตัวเลข 1+ หลัก (ลบตัวเลขที่เหลือ)

กรณีทดสอบเพิ่มเติม

InputOutputอธิบาย
sample 1 2 3 4 5 6sample one two1,2 คงไว้ เปลี่ยนคำ 3-6 หาย
abc123defabcdef123 เป็นกลุ่ม ตัดทิ้ง
version 1.2.3version one.two.31,2 standalone → one,two; 3 ตัดทิ้ง
year 2024year2024 ตัดทิ้งหมด

หมายเหตุ

Lookbehind (?<!\\d) ต้องการ Java 8+ สำหรับ variable-length lookbehind (Java 8 รองรับ finite length)