第1题详见博客http://blog.csdn.net/sd0902/article/details/8395677
第3题网上可以查到很多资料。。http://blog.csdn.net/wcyoot/article/details/6426436
第4题:
/**
4.请编写一个多线程程序,其中一个线程完成对某个对象的int成员变量的增加操作,
即每次加1,另一个线程完成对该对象的成员变量的减操作,即每次减1,同时要保证
该变量的值不会小于0,不会大于1,该变量的初始值为0.
*/
public class TestThread {
public static void main(String[] args) {
/** 第一种方法 */
TestThread t = new TestThread();
AddRunnable add = t.new AddRunnable();
SubRunnable sub = t.new SubRunnable();
new Thread(add).start();
new Thread(sub).start();
/** 第二种方法 */
// new TestThread().call();
}
/******** 下面是第一种方法 ********/
private int i=0;
private synchronized void add(){
if(i<=0){
i++;
System.out.println(i);
}
}
private synchronized void sub(){
if(i>=1){
i--;
System.out.println(i);
}
}
class AddRunnable implements Runnable{
public void run() {
while(true){
add();
}
}
}
class SubRunnable implements Runnable{
public void run() {
while(true){
sub();
}
}
}
/******** 下面是第二种方法 ********/
class Test{
private int j=0;
public synchronized void add(){
if(j<=0){
j++;
System.out.println(j);
}
}
public synchronized void sub(){
if(j>=1){
j--;
System.out.println(j);
}
}
}
Test t = new Test();
void call(){
new Thread(new Runnable() {
public void run() {
while(true){
t.add();
}
}
}).start();
new Thread(new Runnable() {
public void run() {
while(true){
t.sub();
}
}
}).start();
}
}
第5题:(其他方案:http://blog.csdn.net/u013091087/article/details/43793149)
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestString {
public static void main(String[] args) {
System.out.println("please input:");
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
scanner.close();
String[] ss = s.split("[\\s]+"); // \s表示空格、\t、\n等空白字符
for (int i = 0; i < ss.length; i++) {
String up = (ss[i].charAt(0)+"").toUpperCase(); //大写
StringBuffer sb = new StringBuffer(ss[i]);
ss[i] = sb.replace(0, 1, up).toString(); //首字母替换为大写
Matcher m = Pattern.compile("\\d+").matcher(ss[i]);
int lastIndex = 0;
while(m.find()){
String num = m.group();
int index = ss[i].indexOf(num, lastIndex);
StringBuffer sbNum = new StringBuffer(ss[i]);
ss[i] = sbNum.replace(index, index+num.length(), "_"+num+"_").toString();
lastIndex = index + num.length() + 2;
if(ss[i].startsWith("_")){ //去头"_"
ss[i] = ss[i].substring(1);
}
if(ss[i].endsWith("_")){ //去尾"_"
ss[i] = ss[i].substring(0, ss[i].length()-1);
}
}
}
for(int i=0; i<ss.length-1; i++){
System.out.print(ss[i]+" ");
}
System.out.print(ss[ss.length-1]);
}
}
运行结果:
please input:
ab1 23c de44f4 555g55hi5
Ab_1 23_c De_44_f_4 555_g_55_hi_5