求做一道“判断电话号码字符串”的java题目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求做一道“判断电话号码字符串”的java题目相关的知识,希望对你有一定的参考价值。

判断电话号码字符串,要求必须是0-9之间的字符并且是11位,前缀必须是13或者15开头。如果不是抛出异常,如果符合电话号码格式,做控制台输出,使用到的方法length(),charAt(),startsWith();

你好,代码如下:
class PhoneException extends Exception
public PhoneException(String msg)
super(msg) ;



public class BaiduTest06
public static void main(String[] args) throws PhoneException
Scanner sc = new Scanner(System.in) ;
System.out.print("请输入一个号码:");

String phoneNum = sc.next() ;
if (checkNum(phoneNum))
System.out.println("您输入的电话号码格式正确:" + phoneNum);



private static boolean checkNum(String phoneNum) throws PhoneException

if (phoneNum == null || "".equals(phoneNum.trim()))
System.out.println("输入的字符串不能为空!");
return false;

if (phoneNum.length() != 11)
throw new PhoneException("电话号码必须长11位") ;

if (!phoneNum.startsWith("13") && !phoneNum.startsWith("15"))
throw new PhoneException("电话号码必须以13或15开头") ;

if (!phoneNum.matches("^[0-9]11$"))
throw new PhoneException("电话号码必须由数字组成!") ;

return true;

参考技术A public class Number
class MyExecption extends Exception
MyExecption(String mes)
super(mes);



public void check(String string)throws MyExecption
if (string.startsWith("15")||string.startsWith("13"))

else
throw new MyExecption("这个不是电话号码");


public static void main(String[] args)
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个号码:");
if(sc.hasNext("[0-9]11"))

String string=sc.next();
try
new Number().check(string);
catch (MyExecption e)
// TODO Auto-generated catch block
e.printStackTrace();

else
System.out.println("输入有误");


参考技术B 代码如下,修改楼上的:
import java.util.Scanner;

public class BaiduTest06
public static void main(String[] args) throws Exception
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个号码:");
String phoneNum = sc.next();
if (checkNum(phoneNum))
System.out.println("您输入的电话号码格式正确:" + phoneNum);



private static boolean checkNum(String phoneNum) throws Exception

if (phoneNum == null || "".equals(phoneNum.trim()))
System.out.println("输入的字符串不能为空!");
return false;

if (phoneNum.length() != 11)
throw new Exception("电话号码必须长11位");

if (!phoneNum.startsWith("13") && !phoneNum.startsWith("15"))
throw new Exception("电话号码必须以13或15开头");


for (int i = 2; i < phoneNum.length(); i++)
char p = phoneNum.charAt(i);
if (p < '0' || p > '9')
throw new Exception("电话号码必须由数字组成!");


return true;

本回答被提问者采纳

java并发一道多线程问题

前面几篇博文基本上总结了一下java并发里的一些内容,这篇博文主要从一个问题入手,看看都能用到前面总结的哪些并发技术去解决。

题目描述:
模拟一个场景:处理16条日志记录,每条日志记录打印时间需要1秒,正常情况下如果将这16条记录去部打完需要16秒,现在为了提高效率,准备开启4个线程去打印,4秒钟打印完,实现这个demo。

先来分析一下这个题目,关于这16条日志记录,我们可以在主线程中产生出来,这没用什么难度,关键是开启4个线程去执行,现在有两种思路:一种是日志的产生和打印日志的线程在逻辑上分开;一种是日志的产生和打印日志的线程在逻辑上不是分开的。这样说可能有点晦涩,下面我针对这两种思路,写个实现的demo就好理解了。
  思路一:日志产生和日志打印在逻辑上是分开的。
  这相当于两条战线: 一条战线在不停的产生日志,另一个战线在不停的打印日志。很明显会想到阻塞队列的使用,产生日志不停的往阻塞队列中塞,打印日志不停的从阻塞队列中取,阻塞队列的大小可以自己设置,可以设置16个,也可以设置为1个,这都不影响执行。所以会用到BlockingQueue,下面看一下实现的demo:

public class Practice1 {

	public static void main(String[] args) {
		//定义一个阻塞队列,队列大小可以装16个信息
		BlockingQueue<String> queue = new ArrayBlockingQueue<String>(16);
		
		for(int i = 0; i < 4; i ++) { //开启四个线程去阻塞队列中取日志打印
			new Thread(new Runnable() {
				
				@Override
				public void run() {
					while(true) {
						try {
							String log = queue.take();  //取日志
							parseLog(log); //打印日志
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
				}
			}).start();
		}

		System.out.println("begin:" + (System.currentTimeMillis()/1000));

		for(int i = 0; i < 16; i ++) {
			final String log = "" + (i+1); //表示一个日志
			try {
				queue.put(log); //将产生的日志塞到阻塞队列中去
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}
	
	public static void parseLog(String log) { //打印日志的方法
		System.out.println(Thread.currentThread().getName() + "---"
				+ log + "---" + (System.currentTimeMillis()/1000));
		try {
			Thread.sleep(1000); //模拟打印一次日志需要1秒
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

这就好比一个系统正在运作,一边不停的产生日志,一边在不停的开启多个线程去打印日志信息,这个demo就写好了,运行结果就不贴了。
  思路二:日志产生和日志打印在逻辑上不是分开的。
  这种思路就是,我产生日志的同时,你就给我打印出来,四个线程一起干!那么这种思路的话,就得用到线程池了,我一开始创建一个线程池,里面装了4个线程,然后产生日志的时候,我让这个线程池拿线程去执行它即可。demo如下:

public class Practice1 {

	public static void main(String[] args) {
		ExecutorService service = Executors.newFixedThreadPool(4);//创建一个线程池
		System.out.println("begin:" + (System.currentTimeMillis()/1000));
		 
		for(int i = 0; i < 16; i ++) {
			final String log = "" + (i+1); //表示一个日志
			service.execute(new Runnable() { //拿一个线程去执行
				
				@Override
				public void run() {
					parseLog(log);
				}
			});
		}
		service.shutdown(); //最后别忘了关掉线程池

	}
	
	public static void parseLog(String log) {
		System.out.println(Thread.currentThread().getName() + "---"
				+ log + "---" + (System.currentTimeMillis()/1000));
		try {
			Thread.sleep(1000); //模拟打印一次日志需要1秒
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

关于这个问题,就总结到这吧,把这两种思路搞清楚一般就可以有效的解决了。

相关阅读:http://blog.csdn.net/column/details/bingfa.html


欢迎大家关注我的公众号:“武哥聊编程”,一个有温度的公众号~
关注回复:资源,可以领取海量优质视频资料

程序员私房菜


—–乐于分享,共同进步!
—–更多文章请看:http://blog.csdn.net/eson_15

以上是关于求做一道“判断电话号码字符串”的java题目的主要内容,如果未能解决你的问题,请参考以下文章

一道java简单的题目

Java - 一道关于Arrays.asList的题目

求高手帮忙快解决一道JAVA题目,麻烦用JAVA语言来写哦~~~拜谢哦~

美资软件公司JAVA工程师电话面试题目

一道有意思的“初始化”面试题

求做一个最简单的vb计算公式程序的代码