Java中如何去除字符串首尾除单引号外的标点?replaceFirst报错解决
解决Java字符串首尾标点去除问题及报错分析
首先说你遇到的「cannot find symbol」报错——这个问题和正则本身关系不大,大概率是调用replaceFirst()的对象不是String类型,或者变量名拼写错误。举几个常见的错误场景:
- 你可能把字符串变量名写错了(比如定义的是
inputStr,调用时写成了inputStrr) - 你用了非String类型的对象(比如Integer、List)去调用
replaceFirst(),这些类根本没有这个方法 - 你还没定义字符串变量就直接调用方法了
先给你一个能正常运行的示例代码,完全对应你给出的需求和例子:
public class StringTrimDemo { public static void main(String[] args) { String test1 = "!abc3@"; String test2 = "!!abc3@@"; String test3 = "'abc3'"; // 你的原逻辑:去除首尾各一个非字母/数字/单引号的字符 String res1 = test1.replaceFirst("^[^a-zA-Z0-9']", "").replaceFirst("[^a-zA-Z0-9']$", ""); String res2 = test2.replaceFirst("^[^a-zA-Z0-9']", "").replaceFirst("[^a-zA-Z0-9']$", ""); String res3 = test3.replaceFirst("^[^a-zA-Z0-9']", "").replaceFirst("[^a-zA-Z0-9']$", ""); System.out.println(res1); // 输出 abc3 System.out.println(res2); // 输出 !abc3@ System.out.println(res3); // 输出 'abc3' } }
运行这段代码完全不会报错,你可以对照自己的代码,检查变量类型和拼写是否正确。
另外,如果你实际需求是去除首尾所有连续的、除单引号外的标点(比如把!!abc3@@直接变成abc3),那你的原正则只能处理单个字符,需要调整为用replaceAll()并添加+量词(匹配1个或多个连续字符):
// 去除首尾所有非字母/数字/单引号的连续字符 String result = inputStr.replaceAll("^[^a-zA-Z0-9']+", "").replaceAll("[^a-zA-Z0-9']+$", "");
给你解释下这个正则:
^[^a-zA-Z0-9']+:匹配字符串开头的、一串(至少1个)不是字母、数字、单引号的字符[^a-zA-Z0-9']+$:匹配字符串结尾的、一串(至少1个)不是字母、数字、单引号的字符
这样处理后,所有首尾的非目标字符都会被一次性清除,而单引号会被保留。
内容的提问来源于stack exchange,提问作者Deni
相关产品推荐
相关产品推荐

