java中如何取得特定字符前的字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中如何取得特定字符前的字符串相关的知识,希望对你有一定的参考价值。

现有一个邮箱地址
String email = "****@163.com";
如何将邮箱的用户名****和他的邮箱类型(163)截取出来分别放在一个字符串里

//截取#之前的字符串
String str = "sdfs#d";
str.substring(0, str.indexOf("#"));
//输出的结果为:sdfs
//indexOf返回的索引也是从0开始的,所以indexOf("#") = 4。
//java中的substring的第一个参数的索引是从0开始,而第二个参数是从1开始
参考技术A /**
* 保证邮箱地址正确提前下,取得邮箱地址的用户名和域名字符串
* @author 极乐鸟jileniao.net
* @version 01-00
* @since 01-00
*/
public class test

public static void main(String args[])

// 定义邮箱地址的字符串
String mail = "i@jileniao.net";

// 使用split() 方法把 @ 号左右部分分开并保存到数组中
String[] tmp = mail.split("@");

// 数组第一个元素就是邮箱用户名
String mailName = tmp[0];

// 数组第二个元素就是邮箱域名
String mailDomain = tmp[1];



极乐鸟回答。

参考资料:http://jileniao.net

参考技术B 使用正则表达式
^(?<UserName>\w+)@(?<MailType>\w+)\.\w+$
然后把UserName,MailType返回值提取中来就行了,Java中具体关于正则表达式的操作方法,你可以上网搜一下!
参考技术C String name = email.substring(0,email.indexOf("@"));
String type = email.substring(email.indexOf("@") + 1 , email.indexOf("."));
System.out.println(name + " " + type );本回答被提问者采纳
参考技术D

String str = "房估字(2014)第YPQD0006号";


String jieguo = str.substring(str.indexOf("第")+1,str.indexOf("号"));

使用 RegEx 忽略分隔符前的特定字符

【中文标题】使用 RegEx 忽略分隔符前的特定字符【英文标题】:Ignore specific characters before a delimiter with RegEx 【发布时间】:2022-01-22 03:02:30 【问题描述】:

我正在尝试创建两个正则表达式来捕获欧洲车牌所需的字符。

重要的是要提一下

国家 与其他国家/地区(第一个字母)分开的分隔符始终是 * (asterisk) or a - (hyphen) 分隔 与右侧其他字符的分隔符始终为 a - (hyphen) 区还可以包含ä,ö,ü等字母

车牌如下所示:

A*S-XXXPA
A*SL-XXXPC
A*SL-XXXSD
A*HA-XXXHV
D*R-XXXXX
D*TS-XXXXX
A*VB-1XXXXX

我用来捕捉国家和地区的正则表达式如下。

String country = "^([A-Z]1,3)";
String district = "\\h*(\\pL1,3)[-*]";

一旦我从我的字符串中获得了所需的信息,我就会使用 java 代码删除我不需要的信息,这是代码片段:

if (matcher.find()) 
        
        country_region = matcher.group(1);
        country_region = country_region.replace("*", "");
        country_region = country_region.replace("-", "");
        country_region = country_region.replaceAll("\\s+$", "");            

    

我捕获国家/地区的正则表达式工作正常,这是一个示例:

https://regex101.com/r/jfhSJN/1

我遇到麻烦的是我用来捕获地区的 RegEx。目前它还赶上了国家...

https://regex101.com/r/57ZE9O/1

我想我可以删除 RegEx 末尾的星号,但我认为这不是最干净的方法。

谢谢!

【问题讨论】:

【参考方案1】:

地区正则表达式的主要问题是\h* 匹配任何零个或多个水平空格。所以匹配也可以出现在字符串的开头。

由于您想在水平空格后得到匹配,*-,您可以使用

[*\h-](\pL1,3)[-*]

请参阅regex demo。这里,[*\h-] 匹配 *、水平空格或 - 字符。

但是,在将所有部分捕获到组中时,使用正则表达式来匹配搅拌是有意义的:

^([A-Z]1,3)[\h*-](\pL1,3)[-*](.+)

见this regex demo。 详情

^ - 字符串开头 ([A-Z]1,3) - 第 1 组:一个、两个或三个大写字母 [\h*-] - 水平空格,*- (\pL1,3) - 第 2 组:一到三个任意 Unicode 字母 [-*] - -* 字符 (.+) - 第 3 组:直到字符串/行结尾的所有文本。

【讨论】:

嗨@Wiktor Stribiżew - 非常感谢您的精彩解释和回答。就我而言,我明确希望在没有组的情况下工作,以防止 Java 代码发生变化。仅对地区来说可能吗? @Djabone 是的,请参阅 (?&lt;=[*\h-])\pL1,3(?=[-*]) demo here。 如果我做得好,请告诉我好吗? (?&lt;=[*\h-]) positive lookbehind - searches for - but only if there's a * before it? \pL1,3 matches any letter from any language between 1 and 3 characters. ?=[-*] lost me here。非常感谢您的帮助 @Djabone No. (?&lt;=[*\h-]) - 需要*- 或hor 的正向前瞻。当前位置左侧的空格。您正确理解\pL1,3(?=[\h-]) 是一个积极的前瞻,需要一个 hor.空格或- 紧挨当前位置的右侧。

以上是关于java中如何取得特定字符前的字符串的主要内容,如果未能解决你的问题,请参考以下文章

oracle中如何截取字符串中,某个字符前的字符串? 例如截取字符串210-1106000001中“-”前的字符串?

sql server截取某个特定字符前的字符串

java如何把以unicode编码形式的字符串变成编码前的形式

java如何在String数组中取得指定内容的下标?

使用 RegEx 忽略分隔符前的特定字符

python 如何提取特定字符中间的内容