黑马程序员技术交流社区
标题:
才看到的题目,自己留着咯
[打印本页]
作者:
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.
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");
}
}
复制代码
作者:
jiangyong
时间:
2015-4-11 14:16
:handshake:handshake
作者:
major2015
时间:
2015-4-11 14:35
本帖最后由 major2015 于 2015-4-11 14:37 编辑
import java.io.UnsupportedEncodingException;
public class Demo1 {
public static void main(String[] args) throws UnsupportedEncodingException {
String str;
if ((str = getSub("null", 4)) != null)
System.out.println(str);
}
/*
* 关键在于GBK编码是每个中文字符对应两个字节,且都为负数 则统计要截取的字符中有多少个负数,若为奇数,则社区最后一个负数(只有汉字才可以是数组)
*/
public static String getSub(String str, int c)
throws UnsupportedEncodingException {
// 字符串转字节数组,
byte[] b = str.getBytes("gbk");
// 若输入字符串或截取数不合规矩
if (str == null || str.length() < 0 || c < 0 || c > b.length)
return null;
// 统计负数个数
int count = 0;
for (int i = 0; i < c; i++) {
if (b[i] < 0)
count++;
}
// 判断负数个数是否为偶数或0
if (count % 2 == 0) {
// 若为偶数,以gbk返回子字符串
return new String(b, 0, c, "gbk");
}
// 若为奇数,舍去最后一个字节数组,以gbk返回子字符串
return new String(b, 0, --c, "gbk");
}
}
复制代码
作者:
thoris
时间:
2015-4-11 14:57
public class Test004 {
public static void main(String[] args)
{
for(int i=1;i<=100;i++)
{
if(i/10==7 || i%10==7)
{
continue;
}
System.out.println(i);
}
}
}
复制代码
只会第二题。。。
作者:
major2015
时间:
2015-4-11 15:51
thoris 发表于 2015-4-11 14:57
只会第二题。。。
额,简洁多了:'(
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2