Java中如何移除字符串单/双引号并截取最后引号前内容
解决Java中移除双引号并删除引号后内容的问题
你的代码问题在于直接把匹配到的引号内内容赋值给了整个字符串,导致引号前的前缀被完全覆盖,所以只得到了引号里的部分。下面给你两种可行的解决方案:
方案一:单次正则替换一步到位
用正则捕获引号前的内容和引号内的内容,直接替换掉引号及后续部分:
String regex = "^(.*?)[\"”](.*?)[\"”].*$"; payer.nameIst = payer.nameIst.replaceAll(regex, "$1$2");
正则说明:
^匹配字符串起始位置(.*?)非贪婪捕获引号前的所有前缀内容["”]匹配任意一种双引号(英文直引号"或中文弯引号”)(.*?)非贪婪捕获两个引号之间的目标内容["”]匹配结尾的双引号.*$匹配结尾引号之后的所有内容- 替换为
$1$2后,就保留了前缀+引号内的内容,自动去掉了引号和后续部分
方案二:分两步处理(更直观)
先删掉最后一个引号后的所有内容,再移除所有剩余引号:
// 第一步:删除最后一个双引号及之后的所有内容 payer.nameIst = payer.nameIst.replaceAll("([\"”]).*$", ""); // 第二步:移除所有双引号 payer.nameIst = payer.nameIst.replaceAll("[\"”]", "");
步骤说明:
- 第一步正则
([\"”]).*$定位到最后出现的双引号,删除该引号及后面的全部内容 - 第二步直接匹配所有双引号并替换为空,完成移除
两种方案都能处理你提到的两种引号场景:
- 输入
BANK "BTB” AÇIQ SƏHMDAR CƏMİYYƏTİ→ 输出BANK BTB - 输入
"KAPİTAL BANK" AÇIQ SƏHMDAR CƏMİYYƏTİ→ 输出KAPİTAL BANK
内容的提问来源于stack exchange,提问作者Elnur Ahmadov
相关产品推荐
相关产品推荐

