如何在Java中使用正则表达式模式在字符串的最后一个字母之前插入-符号

Posted

技术标签:

【中文标题】如何在Java中使用正则表达式模式在字符串的最后一个字母之前插入-符号【英文标题】:how to insert a - symbol before the last alphabet in a string using regex pattern in java 【发布时间】:2020-10-20 06:28:33 【问题描述】:

嗨,我有一个值,例如 023A,我需要通过删除前导 0 将其替换或格式化为 23-A,它是 123A,它应该是 123-A 任何人都可以在 java regex 中帮助我如何做到这一点?

【问题讨论】:

这里的替换逻辑请描述的更清楚。 input.replaceAll("^(0*)(.*)(\\w)$", "$2-$3"); 假设感兴趣的字符串由一个或多个数字后跟一个大写字母组成,您可以将正则表达式\b0*(\d+)([A-Z])\b的匹配替换为"$1-$2"$1$2捕获组 1 和 2 的内容。ref @CarySwoveland 添加评论链接的工具提示说:避免在 cmets 中回答问题。我认为您的评论是一个很好的答案。 【参考方案1】:

我已经编写了一些特定于您所要求的模式的代码,希望对您有所帮助。

代码:

import java.util.Scanner;

public class Demo 


static String format(String str)

    String string = "";
        
    try
    
     //remove every non-numerical character at the start of string, if there is
     //remove every zero at the start of string   
     while(str.startsWith("0") || Character.isLetter(str.charAt(0))) 
        str = str.substring(1);
     
         
     //Gets the index of firstmost non-numerical character
     int index = 0;
     boolean valueFound = false;
     for(int i = 0; i <= str.length() -1; i++)
     
      if(Character.isLetter(str.charAt(i))) 
        index = i;
        valueFound = true;
        break;
          
         
         
     if(valueFound)
     
      string = str.replaceFirst(String.valueOf(str.charAt(index)), "-" + 
      String.valueOf(str.charAt(index)));
     
      
    catch(Exception ex)ex.printStackTrace(); 
        
    return string;   
 
    
    public static void main(String[] args) 
        Scanner in = new Scanner(System.in);
        System.out.print("Input a combination : "); 
        String line = in.nextLine();
        System.out.println("Input   :" + line);
        System.out.println("Output  :" + format(line));
    
    

测试 1:

Input a combination : 023A
Input   :023A
Output  :23-A

测试 2:

Input a combination : 123A
Input   :123A
Output  :123-A

【讨论】:

以上是关于如何在Java中使用正则表达式模式在字符串的最后一个字母之前插入-符号的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Java 字符串转换为模式正则表达式?

正则表达式怎么匹配字符串中最后一串数字?

正则表达式:匹配模式后跟一个空格但不匹配2个或更多空格或EOF

正则表达式没有想象中的那么难

Java正则表达式

Java笔记:正则表达式