// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { StringBuffer s1=new StringBuffer("A"); StringBuffer s2=new StringBuffer("B"); process(s1,s2); System.out.println(s1); System.out.println(s2); } public static void process(StringBuffer s1,StringBuffer s2){ s1.append(s2); s2=s1; }
1)上述程序输出的结果是:AB,B
2)下列不能作为标识符的是:
标识符 A ATRING B X3X C void,int,double D desf
解析: 数字字母下划线以及美元符号,标识符是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义,况且数字不能在最前面
编程题1:回文串
回文串是正着读反着读都是一样的字符串,比如说level和noon等就是回文串,花花非常喜欢这种具有对称美的回文串,在他生日的时候他得到两个礼物分别是字符串A和字符串B,但是她非常好奇有没有一种办法将字符串B插入字符串A使其产生的字符串是一个回文串,请你进行寻找有多少种不同的方法使得新串变成一个回文串,你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法;
举个例子:
假设说字符串A="aba",字符串B="b",现在有四种将B插入A的方法:
插在字符串A的第一个字母'a'前面,"baba"不是回文串
插在字符串A的第一个字母'a'后面,发现'abba'是一个回文串
插在字符串A的第二个字母'b'后面,发现'abba'是一个回文串
插在字符串A的第三个字母'a'后面,发现'abab'不是一个回文串
所以说此时的的正确答案是4个
注意事项:
1)在StringBuffer这个对象中,是没有equals方法的,我们假设说如果调用了StringBuilder的equals方法,那么就默认调用的是父类的equals方法,比较的是两个对象的地址比如说:
public static void main(String[] args) { StringBuilder S1=new StringBuilder("abc"); StringBuilder S2=new StringBuilder("abc"); System.out.println(S1.equals(S2));//这个默认比较的是父类的equals方法 }
2)我们在StringBuffer中进行调用字符串逆置的时候,不光新接收的stringBuffer指向的字符数组会发生改变,况且来说原来字符串指向的stringBuffer也会发生改变:
String str1="abcd"; StringBuilder S1=new StringBuilder(str1); StringBuilder S2=S1.reverse(); System.out.println("=========="); System.out.println(str1); System.out.println(S1); System.out.println(S2);
这个程序的打印结果就是
abcd
dcba
dcba3)StringBuffer还有一个库函数叫做insert方法:
一:第一个参数是你想进行插入的目标位置,第二个参数就是你要进行插入的字符串:
StringBuffer S1=new StringBuffer("HelloWorld"); S1.insert(0,"lijiawei"); System.out.println(S1);
最终咱们程序的打印结果就是:lijiaweiHelloWorld
二:况且来说这个方法也是可以进行插入字符的:
StringBuffer stringBuffer=new StringBuffer("aaaaa"); stringBuffer.insert(0,'c'); System.out.println(stringBuffer);
所以说最终打印的结果是caaaa
所以说它最终会进行替换对应位置的字符,况且会把对应位置的字符向后进行移动:
思路:
一:判断是否回文
如果说只给一个字符串判断它是否是回文串,那么就通过两种方法来进行解决
1)直接进行逆置,判断是否和原来的字符串是相同的
2)定义双指针,一个指向头,一个指向未,让指向头和指向未的字符串都向前进行减减,如果说他们所指向的字符不相等,那么就说明不是回文串
二:找到合适的位置进行插入
其实我们最本质上纠结的一个问题就是说如何在上述字符串str1的_位置依次插入一个字符串B,然后逐步地进行判断他是否是一个回文串,在定义变量进行++操作
依次再放到1号,2号,3号,4号位置,这个移动元素的过程标志库已经帮我们做好了这件事情了
注意:我们也是可以把对应的字符串放到4号位置且不会出现下标越界的情况,因为这不是一个数组
StringBuffer buffer=new StringBuffer("abcd"); buffer.insert(4,'0'); System.out.println(buffer);
上述程序的运行结果是:
abcd0
import java.util.*; public class Main{ public static void main(String[] args){ Scanner scanner=new Scanner(System.in); while(scanner.hasNext()){ String A=scanner.nextLine(); String B=scanner.nextLine(); int count=0; for(int i=0;i<=A.length();i++){ StringBuffer S1=new StringBuffer(A); S1.insert(i,B);//插入到对应的位置 StringBuffer temp=new StringBuffer(S1); StringBuffer S2=S1.reverse();//继续宁字符串逆置操作最后在来进行判断是否相等 if(temp.toString().equals(S2.toString())){ count++; } } System.out.println(count); } } }
import java.util.*; public class Main{ public static boolean isTrue(StringBuffer S){ char[] array=S.toString().toCharArray(); int left=0; int right=array.length-1; while(left<=right){ if(array[left]!=array[right]){ return false; } left++; right--; } return true; } public static boolean isTrue(StringBuffer S){ char[] array=S.toString().toCharArray(); int left=0; int right=array.length-1; while(left<right){ if(array[left]!=array[right]){ return false; } left++; right--; } return true; } public static void main(String[] args){ Scanner scanner=new Scanner(System.in); while(scanner.hasNext()){ String A=scanner.nextLine(); String B=scanner.nextLine(); int count=0; for(int i=0;i<=A.length();i++){ StringBuffer S1=new StringBuffer(A); S1.insert(i,B); if(isTrue(S1)){ count++; } } System.out.println(count); } } }
或者我们通过上述的方式进行解答也是可以的