package com.review.j2se;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] argv) throws Exception {
parseToBinary();
}
/**
* 正则提取参数
*/
public static void test2() {
String str = "218.4.60.214 passport.99fund.com - [23/Aug/2011:15:10:34 +0800] \"GET /servlet/buildimageservlet HTTP/1.1\" 200 1342 \"https://trade.99fund.com/index.jsp?utm_source=n100821020\" \"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; znwb6300)\" \"JSESSIONID1=TTRHgwnrpvThlbtlGGW0Wv6kc6JrLGnGDGHnJhPnvZJLHDn34w44!-1839838299; utm_source=n110729001; sso_cookie=%2FaeNSbZlrc3ovm0HMv1NPQcsP43VuHZqd0Y6qDkNRsOpLcxna2btP%2BwMDUMXZl8o; ec_custid=3041221\"";
Pattern pattern1 = Pattern.compile("\\[.*?\\]");
Pattern pattern2 = Pattern.compile("utm_source=\\w*");
Pattern pattern3 = Pattern.compile("ec_custid=\\w*");
Matcher matcher = pattern1.matcher(str);
if (matcher.find()) {
System.out.println(matcher.group());
}
matcher = pattern2.matcher(str);
if (matcher.find()) {
System.out.println(matcher.group());
}
matcher = pattern3.matcher(str);
if (matcher.find()) {
System.out.println(matcher.group());
}
}
/**
* 有5对IP地址,要求计算出这5对IP地址是否有交集。
*/
public static void intersectionProblem() throws Exception {
List<String> list = new ArrayList<String>();
list.add("192.168.1.3-192.168.1.5");
list.add("192.168.1.1-192.168.1.2");
list.add("192.168.1.1-192.168.1.3");
for (int i = 0; i < list.size() - 1; i++) {
for (int j = i + 1; j < list.size(); j++) {
String ips1 = list.get(i);
String ips2 = list.get(j);
boolean result = compareIps(ips1, ips2);
if (result) {
System.out.println(ips1 + " 和 " + ips2 + " 有交集");
} else {
System.out.println(ips1 + " 和 " + ips2 + " 没有交集");
}
}
}
}
// 比较两组ip是否有交集
private static boolean compareIps(String ips1, String ips2) {
String[] array1 = ips1.split("-");
String[] array2 = ips2.split("-");
if (compareIp(array1[0], array2[0]) >= 0 && compareIp(array1[0], array2[1]) <= 0) {
return true;
} else if (compareIp(array1[1], array2[0]) >= 0 && compareIp(array1[1], array2[1]) <= 0) {
return true;
}
return false;
}
// 比较两个ip , 如果前者比后者大 , 则返回正数
private static int compareIp(String ip1, String ip2) {
String[] array1 = ip1.split("\\.");
String[] array2 = ip2.split("\\.");
for (int i = 0; i < 4; i++) {
int i1 = Integer.parseInt(array1[i]);
int i2 = Integer.parseInt(array2[i]);
if (i1 > i2) {
return 1;
} else if (i1 < i2) {
return -1;
}
}
return 0;
}
/**
* 一个农夫养了一头牛,三年后,这头牛每年会生出1头牛,生出来的牛三年后,又可以每年生出一头牛……问农夫10年后有多少头牛?n年呢?(用JAVA实现)
*/
public static void cattleProblem() {
List<Integer> list = new LinkedList<Integer>();
list.add(0);
int year = 10;
for (int i = 0; i < year; i++) {
int len = list.size();
for (int j = 0; j < len; j++) {
int age = list.get(j) + 1;
list.set(j, age);
if (age > 2)
list.add(0);
}
}
System.out.println(list.size());
}
/**
* 用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求: "4 "不能在第三位, "3 "与 "5 "不能相连.
*/
public static void test() {
String str = "122345";
TreeSet<String> results = new TreeSet<String>();
testImpl(str, "", results);
for (String result : results) {
System.out.println(result);
}
System.out.println("总数为:" + results.size());
}
public static void testImpl(String arg, String str, TreeSet<String> results) {
if (arg.length() > 0) {
for (int i = 0; i < arg.length(); i++) {
String temp = arg.substring(0, i) + arg.substring(i + 1);
String temp2 = str + arg.charAt(i);
testImpl(temp, temp2, results);
}
} else {
if (str.charAt(3) != '4' && !str.contains("35") && !str.contains("53"))
results.add(str);
}
}
/**
*计算趋于无穷大的数的余数
*/
public static void remain() {
String str = "5673454322654648748998323211231231231231231231231231232145668127348612734128637423123";
int remainder = 0;
for (int i = 0; i < str.length(); i += 8) {
String temp;
if (i + 8 < str.length()) {
temp = str.substring(i, i + 8);
} else {
temp = str.substring(i);
}
remainder = Integer.parseInt(remainder + temp) % 7;
}
System.out.println(str);
System.out.println("除以7的余数为" + remainder);
}
/**
* 100匹马背100担粮。 大马一匹背3担,中马一匹背2担。小马2匹背一担。请编程输出所有满足条件的情况
* 6i+4j+k = 200
* i+j+k = 100
* 相减得出
* 5i + 3j = 100
* k = 100 - i - j;
* 求所有 ijk的组合
*/
public static void horseTest() {
for (int i = 0; i <= 20; i++) {
int j = (100 - i * 5) / 3;
int k = 100 - i - j;
if (i * 3 + j * 2 + k * 0.5 == 100)
System.out.println("i:" + i + "\tj:" + j + "\tk:" + k);
}
}
/**
* 编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。
* 这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。
*/
public static void parseToBinary() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = "";
try {
str = br.readLine();
} catch (Exception e) {
e.printStackTrace();
}
if (!Pattern.matches(("[0-9]*"), str)) {
throw new Exception("不是数字");
}
int i = 0;
try {
i = Integer.parseInt(str);
} catch (NumberFormatException e) {
throw new Exception("数字范围太大或者太小");
}
System.out.println(Integer.toBinaryString(i));
}
/**
* 请在一个类中编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),否则,返回-1。
* 要搜索的字符数组和字符都以参数形式传递传递给该方法,如果传入的数组为null,应抛出IllegalArgumentException异常。
* 在类的main方法中以各种可能出现的情况测试验证该方法编写得是否正确,例如,字符不存在,字符存在,传入的数组为null等。
*/
public static int search(String[] array, String target) {
if (null == array) {
throw new IllegalArgumentException();
}
for (int i = 0; i < array.length; i++) {
if (array[i] == target)
return i;
}
return -1;
}
/**
* 排序, 微软面试题
*/
public static void testSort() {
String[] strs = new String[] { "Bc", "Ad", "Ada", "aC", "Hello", "X man", "little", "During", "day" };
Arrays.sort(strs, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int len = o1.length() > o2.length() ? o2.length() : o1.length();
for (int i = 0; i < len; i++) {
byte b1 = o1.getBytes()[i];
byte b2 = o2.getBytes()[i];
if (b1 - b2 == 32) {
return 1;
} else if (b2 - b1 == 32) {
return -1;
}
if (b1 > 96 && b1 < 123) {
b1 -= 32;
}
if (b2 > 96 && b2 < 123) {
b2 -= 32;
}
if (b1 != b2) {
return b1 - b2;
}
}
return 0;
}
});
System.out.println(Arrays.toString(strs));
}
}
自己做的一些题 , 持续更新
最新推荐文章于 2024-05-01 19:17:00 发布