1.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如我ABC”4,应该截为“我AB”,输入“我ABC 汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
package com;
import java.io.UnsupportedEncodingException;
public class Practice1 {
public static void main(String[] args) {
String str = "我ABC汉DEF";
int a = 4;
excute(str, a);
}
private static void excute(String str, int a) {
// 统计负数的个数
int count = 0;
try {
// 汉字截半的话对应字节的ASC码为小于0,gbk一个汉字2个字节,utf-8一个汉字3个字节
byte[] b = str.getBytes("gbk");
for (int i = 0; i < a; i++) {
if (b[i] < 0) {
count++;
}
}
// 不管负数出现偶数还是奇数个count+1/2统计都是需要减去的个数
int dec = (count + 1) / 2;
System.out.println(str.substring(0, a - dec));
// 如果采用utf-8则可以采取下面算法,不能合并a-count算出非汉字个数,count/3为汉字个数
// System.out.println(str.substring(0,a-count+count/3));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
2.
从键盘上输入10个数,并将其放入一个一维数组中,然后将其前5个元素与后5个元素兑换即:第一个元素与第十个元素互换,第二个元素与第九个元素互换.第5个元素与第六个元素互换,分别输出数组原来各元素的值和对换后的元素值.
package com;
import java.util.Scanner;
public class Practice2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第" + (i + 1) + "个数");
int m = sc.nextInt();
arr[i] = m;
}
System.out.println("输入前数组");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
for (int i = 0; i < arr.length/2; i++) {
int temp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
}
System.out.println("转换后的数组");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
3.
判断一个数是否是回文数
package com;
import java.util.Scanner;
public class Practice3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字:");
String s = sc.next();
int length = s.length();
int i = 0;
// 下标从0开始所以i要小于(length-1)/2
while (i <= (length - 1) / 2 && s.charAt(i) == s.charAt(length - i - 1)) {
i++;
}
// 比较的次数为(length+1)/2,
if (i == (length + 1) / 2) {
System.out.println("是回文数字");
} else {
System.out.println("不是回文数字");
}
sc.close();
}
}