黑马程序员技术交流社区

标题: 才看到的题目,自己留着咯 [打印本页]

作者: major2015    时间: 2015-4-11 14:13
标题: 才看到的题目,自己留着咯
题目一:写一个正则表达式,可以匹配手机号。规则: 第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.
  1. public static void main(String[] args) {
  2.                 for (int i = 1; i < 100; i++) {
  3.                         String s = i + "";
  4.                         if (s.length() == 1) {
  5.                                 if ((s.charAt(0) + "").equals("7"))
  6.                                         continue;
  7.                         } else {
  8.                                 if ((s.charAt(0) + "").equals("7")|| (s.charAt(1) + "").equals("7"))
  9.                                         continue;
  10.                         }
  11.                         System.out.print(i + "\t");
  12.                         if (i % 10 == 0)
  13.                                 System.out.println();
  14.                 }
  15.         }
复制代码
3.不会,然后百度了
  1. package com.itheima;

  2. import java.io.IOException;
  3. import java.util.Scanner;

  4. /**
  5. 需求:编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表)。
  6.                 例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文

  7. 思路:  输入一个字符串,和要截取的字数
  8.                 定义一个函数,函数功能:从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表)
  9.                 把字符串转成字节数组
  10.                 因为中文GBK是返回两个负数,所以从最后一个开始往前遍历
  11.                 定义一个计数器,遍历,如果便利到负数就+1。
  12.                 如果负数个数为单数,那么为半个中文,舍弃,返回-1之前的数,转换成字符串输出
  13.                 否则为一个中文,转换成字符串输出
  14.                 @author run_wind
  15. */

  16. class Test10
  17. {               
  18.         public static void main(String[] args) throws IOException
  19.         {
  20.         
  21.                 Scanner in = new Scanner(System.in);//获取键盘输入的实例
  22.                 System.out.print("请输入字符串(直接回车默认HM程序员):");
  23.                 String string = in.nextLine();
  24.                 if (string.equals(""))
  25.                                 string = "HM程序员";
  26.                 System.out.print("请输入截取的字节数:");
  27.                 int byte_num = in.nextInt();
  28.                
  29.         Test10 t10 = new Test10();
  30.         System.out.println(t10.getString(string, byte_num));
  31.      }
  32.         
  33.         //函数功能:从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表)
  34.         public String getString(String str,int key) throws IOException
  35.         {        
  36.                 byte[] buf = str.getBytes("gbk");//编码
  37.                
  38.                 //因为中文GBK是返回两个负数,所以从最后一个开始往前遍历
  39.                 //如果负数个数为单数,那么为半个中文,舍弃,否则为一个中文,返回
  40.                 int count = 0;
  41.                 for(int x=key-1; x>=0; x--)
  42.                 {
  43.                         if(buf[x]<0)
  44.                                 count++;
  45.                         else
  46.                                 break;
  47.                 }
  48.                
  49.                 if(count%2==0)//解码。如果为单数就是半个中文,要舍弃最后的数
  50.                         return new String(buf,0,key,"gbk");
  51.                 else
  52.                         return new String(buf,0,key-1,"gbk");
  53.         }
  54. }
复制代码








作者: jiangyong    时间: 2015-4-11 14:16
:handshake:handshake
作者: major2015    时间: 2015-4-11 14:35
本帖最后由 major2015 于 2015-4-11 14:37 编辑
  1. import java.io.UnsupportedEncodingException;

  2. public class Demo1 {

  3.         public static void main(String[] args) throws UnsupportedEncodingException {
  4.                 String str;
  5.                 if ((str = getSub("null", 4)) != null)
  6.                         System.out.println(str);
  7.         }

  8.         /*
  9.          * 关键在于GBK编码是每个中文字符对应两个字节,且都为负数 则统计要截取的字符中有多少个负数,若为奇数,则社区最后一个负数(只有汉字才可以是数组)
  10.          */
  11.         public static String getSub(String str, int c)
  12.                         throws UnsupportedEncodingException {
  13.                 // 字符串转字节数组,
  14.                 byte[] b = str.getBytes("gbk");

  15.                 // 若输入字符串或截取数不合规矩
  16.                 if (str == null || str.length() < 0 || c < 0 || c > b.length)
  17.                         return null;
  18.                 // 统计负数个数
  19.                 int count = 0;
  20.                 for (int i = 0; i < c; i++) {
  21.                         if (b[i] < 0)
  22.                                 count++;
  23.                 }
  24.                 // 判断负数个数是否为偶数或0
  25.                 if (count % 2 == 0) {
  26.                         // 若为偶数,以gbk返回子字符串
  27.                         return new String(b, 0, c, "gbk");
  28.                 }
  29.                 // 若为奇数,舍去最后一个字节数组,以gbk返回子字符串
  30.                 return new String(b, 0, --c, "gbk");
  31.         }
  32. }
复制代码

作者: thoris    时间: 2015-4-11 14:57
  1. public class Test004 {
  2.                                 public static void main(String[] args)
  3.                                 {
  4.                                         for(int i=1;i<=100;i++)
  5.                                         {
  6.                                                 if(i/10==7 || i%10==7)
  7.                                                 {
  8.                                                         continue;
  9.                                                 }
  10.                                                 System.out.println(i);
  11.                                         }
  12.                                 }
  13. }
复制代码


只会第二题。。。
作者: major2015    时间: 2015-4-11 15:51
thoris 发表于 2015-4-11 14:57
只会第二题。。。

额,简洁多了:'(




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2