作业一:
package com.work3;
import java.util.Scanner;
/**
* 编写截取字符串的方法,输入为一个字符串和字节数,输出为按字节截取的字符串。
* 具体要求:确保汉字不被截取半个,
* 如“我ABC”,4,应该截为 我AB;
* 输入 我ABC汉语DEF,6 输出 我ABC,而不是汉的半个字;
* 输入 我ABC汉语DEF,7 ,输出 我ABC汉。
* @author Administrator
*
*/
public class CutStringTest {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
while(true) {
System.out.println("请输入一个带中文的字符串,和要截取的字节数:");
//带中文的字符串
String str=scan.next();
//截取的字节数
int num=scan.nextInt();
//
byte[] buf=str.getBytes();
if(num<=buf.length) {
System.out.println("输入正确,即将截取字符串...");
int times=0;
for(int i=0;i<num;i++) {
if(buf[i]<0) {
times++;
}
}
//汉字半个的不要
if(times%2==1) {
num--;
}
//字节转成字符串,String(byte[] bytes, int offset, int length)
String out=new String(buf,0,num);
System.out.println("截取的字符串是:"+out);
System.out.println();
}else {
try {
throw new MyException("截取字节数超出字符串长度...");
} catch (MyException e) {
e.printStackTrace();
}
}
scan.close();
}
}
}
class MyException extends Exception{
/**
*
*/
private static final long serialVersionUID = 1L;
public MyException(String msg) {
super(msg);
}
}
作业二:
package com.work3;
/**
* 把前面的格式转换成后面的格式。
ttt5yjd-jdd4yh tttyyyyyjd@jddyyyyh
Hsdkf4sd-fsd3tr Hsdkfssssd@fsd3tttr
Sf5sd-dsd4wr Sfsssssd@dsdwwwwr
* @author Administrator
*
*/
public class Translate {
public static void main(String[] args) {
String a1="ttt5yjd-jdd4yh";
String a2="Hsdkf4sd-fsd3tr";
String a3="Sf5sd-dsd4wr";
System.out.println(translateString(a1));
System.out.println(translateString(a2));
System.out.println(translateString(a3));
}
static String translateString(String s) {
String concat =null;
StringBuilder sb=new StringBuilder();
for(int i=0;i<s.length();i++) {
//char转换为String类型,再转换为Interger类型
if(Character.isDigit(s.charAt(i))){
String temp = String.valueOf(s.charAt(i));
for(int j=0; j<Integer.valueOf(temp)-1;j++) {
sb.append(s.charAt(i+1));
}
}else {
sb.append(s.charAt(i));
}
}
return sb.toString().replace("-", "@");
}
}
作业三:
package com.work3;
/**
* 获取两个字符串的最大相同子串,例如abegad与acegab,最大相同子串为ega。
* @author Administrator
*
*/
public class CompareString {
public static void main(String[] args) {
String a="abegad";
String b="acegab";
//
String c=getSonString(a,b);
System.out.println(c);
}
/**
* 得到最大相同子串
* @param a
* @param b
* @return
*/
private static String getSonString(String a, String b) {
String max="",min="",temp="";
//寻找较大以及较小的字符串
max=a.length()>b.length()?a:b;
min=(max==a)?b:a;
for (int i = 0; i <min.length(); i++) {
for (int j = 0; j <=i; j++) {
String substring = min.substring(j, min.length()-i+j);//从小的字符串开始,从左向右移位比较
if (max.contains(substring)) {
if(temp.length()<substring.length()) {
temp=substring;
}
}
}
}
return temp;
}
}
字节、字符的区别,一个汉字是占两个字节还是两个字符?
英文字母和中文汉字在不同字符集编码下的字节数
英文字母:
字节数 : 1;编码:GB2312
字节数 : 1;编码:GBK
字节数 : 1;编码:GB18030
字节数 : 1;编码:ISO-8859-1
字节数 : 1;编码:UTF-8
字节数 : 4;编码:UTF-16
字节数 : 2;编码:UTF-16BE
字节数 : 2;编码:UTF-16LE
中文汉字:
字节数 : 2;编码:GB2312
字节数 : 2;编码:GBK
字节数 : 2;编码:GB18030
字节数 : 1;编码:ISO-8859-1
字节数 : 3;编码:UTF-8
字节数 : 4;编码:UTF-16
字节数 : 2;编码:UTF-16BE
字节数 : 2;编码:UTF-16LE