java中如何提取一个字符串中的电话号码?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中如何提取一个字符串中的电话号码?相关的知识,希望对你有一定的参考价值。
比如:132******,186******、1001*。
怎么能截取出这里的电话号码呢,又没有大神来指点一下啊?拜谢!
java中如何提取一个字符串中的电话号码,先写出手机号码和固定号码的正则表达式,然后创建模式,获取到匹配器,从而刷选出符合要求的电话号码,如下:
import java.util.regex.Pattern;
public class TestC
public static void main(String[] args)
//要提前号码的字符串
String str="n13977777777s18911111111你好15988888888hha0955-7777777sss0775-6678111";
//提取手机号码
checkCellphone(str);
//提取固定电话号码
checkTelephone(str);
/**
* 查询符合的手机号码
* @param str
*/
public static void checkCellphone(String str)
// 将给定的正则表达式编译到模式中
Pattern pattern = Pattern.compile("((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\\\d8");
// 创建匹配给定输入与此模式的匹配器。
Matcher matcher = pattern.matcher(str);
//查找字符串中是否有符合的子字符串
while(matcher.find())
//查找到符合的即输出
System.out.println("查询到一个符合的手机号码:"+matcher.group());
/**
* 查询符合的固定电话
* @param str
*/
public static void checkTelephone(String str)
// 将给定的正则表达式编译到模式中
Pattern pattern = Pattern.compile("(0\\\\d2-\\\\d8(-\\\\d1,4)?)|(0\\\\d3-\\\\d7,8(-\\\\d1,4)?)");
// 创建匹配给定输入与此模式的匹配器。
Matcher matcher = pattern.matcher(str);
//查找字符串中是否有符合的子字符串
while(matcher.find())
//查找到符合的即输出
System.out.println("查询到一个符合的固定号码:"+matcher.group());
结果:
查询到一个符合的手机号码:13977777777
查询到一个符合的手机号码:18911111111
查询到一个符合的手机号码:15988888888
查询到一个符合的固定号码:0955-7777777
查询到一个符合的固定号码:0775-6678111 参考技术A public String getNum(String str)
String str2="";
str=str.trim();
if(str != null && !"".equals(str))
for(int i=0;i<str.length();i++)
if(str.charAt(i)>=48 && str.charAt(i)<=57)
str2+=str.charAt(i);
return str2;
如何从Java中的字符串中提取大写子字符串?
【中文标题】如何从Java中的字符串中提取大写子字符串?【英文标题】:How to extract uppercase substrings from a String in Java? 【发布时间】:2012-02-18 17:37:54 【问题描述】:我需要一段代码,我可以使用它从 Java 中的字符串中提取大写的子字符串。 例如:
"a:[AAAA|0.1;BBBBBBB|-1.90824;CC|0.0]"
我需要提取CC
BBBBBBB
和AAAA
【问题讨论】:
这是regular expressions的工作。 【参考方案1】:您可以使用String[] split(String regex)
完成此操作。唯一的问题可能是空字符串,但很容易将它们过滤掉:
String str = "a:[AAAA|0.1;BBBBBBB|-1.90824;CC|0.0]";
String[] substrings = str.split("[^A-Z]+");
for (String s : substrings)
if (!s.isEmpty())
System.out.println(s);
输出:
AAAA
BBBBBBB
CC
【讨论】:
这也从混合大小写字符串中返回单个大写字符;【参考方案2】:这可能就是你要找的:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class MatcherDemo
private static final String REGEX = "[A-Z]+";
private static final String INPUT = "a:[AAAA|0.1;BBBBBBB|-1.90824;CC|0.0]";
public static void main(String[] args)
Pattern p = Pattern.compile(REGEX);
// get a matcher object
Matcher m = p.matcher(INPUT);
List<String> sequences = new Vector<String>();
while(m.find())
sequences.add(INPUT.substring(m.start(), m.end()));
【讨论】:
【参考方案3】:我认为你应该做一个替换所有正则表达式来将你不想要的字符变成分隔符,也许是这样的:
-
str.replaceAll("[^A-Z]+", "")
修剪任何前导或尾随空格。
然后,如果你愿意,你可以调用 str.split(" ")
【讨论】:
【参考方案4】:如果您只想提取所有大写字母,请使用[A-Z]+
,如果您只需要大写子字符串,这意味着如果您有小写字母,则不需要它(HELLO
可以,但Hello
不是) 然后使用\b[A-Z]+\b
【讨论】:
字边界 - 你可以阅读更多关于它here 实际上使用正则表达式的方式是 "\\b[^AZ]+\\b" 并且 "JOHN DOE is a name" 的输出是 JOHN DOE using string.split in Java 【参考方案5】:这应该演示正确的语法和方法。更多细节可以在这里找到http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html和http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Matcher.html
String myStr = "a:[AAAA|0.1;BBBBBBB|-1.90824;CC|0.0]";
Pattern upperCase = Pattern.compile("[A-Z]+");
Matcher matcher = upperCase.matcher(myStr);
List<String> results = new ArrayList<String>();
while (matcher.find())
results.add(matcher.group());
for (String s : results)
System.out.println(s);
[A-Z]+
部分是完成大部分工作的正则表达式。如果您想深入了解,这里有很多强大的正则表达式教程。
【讨论】:
以上是关于java中如何提取一个字符串中的电话号码?的主要内容,如果未能解决你的问题,请参考以下文章
Python基础(26) - 如何提取电话号码中的区号,电话号码及分机号
如何从 Android 中的 Vision OCR 结果文本中提取姓名、电话号码和电子邮件地址?