题目一:写一个正则表达式,可以匹配手机号。规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。例如:18601088888、13912366666
题目二:编写程序,打印1到100之内的整数,但数字中包含7的要跳过,例如:17、27、71、72
题目三:编写程序,从一个字符串中按字节数截取一部分,但不能截取出半个中文,例如:从“hello枷哇”中截取2个字节是“he,截取6个字节也要是"hello",而不要出现半个中文
1.
1[3458]\d{4}(\d)\1{4}
1 匹配 1
[3458] 匹配 3 4 5 8 任意一个
\d{4} 匹配 4个0-9
(\d) 匹配 0-9并捕获到\1,重点
\1{4} 匹配 4个之前捕获到的\1
2.- public static void main(String[] args) {
- for (int i = 1; i < 100; i++) {
- String s = i + "";
- if (s.length() == 1) {
- if ((s.charAt(0) + "").equals("7"))
- continue;
- } else {
- if ((s.charAt(0) + "").equals("7")|| (s.charAt(1) + "").equals("7"))
- continue;
- }
- System.out.print(i + "\t");
- if (i % 10 == 0)
- System.out.println();
- }
- }
复制代码 3.不会,然后百度了- package com.itheima;
- import java.io.IOException;
- import java.util.Scanner;
- /**
- 需求:编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表)。
- 例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文
- 思路: 输入一个字符串,和要截取的字数
- 定义一个函数,函数功能:从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表)
- 把字符串转成字节数组
- 因为中文GBK是返回两个负数,所以从最后一个开始往前遍历
- 定义一个计数器,遍历,如果便利到负数就+1。
- 如果负数个数为单数,那么为半个中文,舍弃,返回-1之前的数,转换成字符串输出
- 否则为一个中文,转换成字符串输出
- @author run_wind
- */
- class Test10
- {
- public static void main(String[] args) throws IOException
- {
-
- Scanner in = new Scanner(System.in);//获取键盘输入的实例
- System.out.print("请输入字符串(直接回车默认HM程序员):");
- String string = in.nextLine();
- if (string.equals(""))
- string = "HM程序员";
- System.out.print("请输入截取的字节数:");
- int byte_num = in.nextInt();
-
- Test10 t10 = new Test10();
- System.out.println(t10.getString(string, byte_num));
- }
-
- //函数功能:从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表)
- public String getString(String str,int key) throws IOException
- {
- byte[] buf = str.getBytes("gbk");//编码
-
- //因为中文GBK是返回两个负数,所以从最后一个开始往前遍历
- //如果负数个数为单数,那么为半个中文,舍弃,否则为一个中文,返回
- int count = 0;
- for(int x=key-1; x>=0; x--)
- {
- if(buf[x]<0)
- count++;
- else
- break;
- }
-
- if(count%2==0)//解码。如果为单数就是半个中文,要舍弃最后的数
- return new String(buf,0,key,"gbk");
- else
- return new String(buf,0,key-1,"gbk");
- }
- }
复制代码
|
|