String和StringBuffer

来源:互联网 发布:桌面便签软件 编辑:程序博客网 时间:2024/05/21 05:05
知识要点:String和StringBuffer
首先谈一下String。
关于String大家可能有这么一个误区,会以为String是基本数据类型,这是错误的理解。这里回顾一下,java的数据类型有两种,一种是基本数据类型,一种是复合数据类型。基本数据类型包括整形(byte,short,int,long),浮点型(float,double),字符类型(char),布尔类型(boolean);复核数据类型包括class(类),interface(接口)以及数组。String不是基本数据类型而是一个类,它被用来表示字符序列。标准初始化方式有两种:String greeting=“Hello!”;
                         String greeting=new String("Hello!");
在这里见到介绍String常用的其他方法:
1,静态方法valueOf负责将其他基本数据类型转化为String。
2,charAt(int index)得到字符串指定位置的一个字符。
3,字符串替换(replace开头)方法,字符串大小写转化方法(toUpperCase,toLowerCase),去空格方法(trim)。

接下来StringBuffer
StringBuffer是一个具有对象引用传递特点的字符串对象。采用append(“str”)地方法增加字内容。
一、String和StringBuffer有什么区别,"=="和equals()有什么区别。char能不能放下一个中文字符,为什么? 
(1)本质上的区别是:String是不可变类(immutable),而StringBuffer是可变类。 
StringBuffer是可以改变字符串长度的,用append("str")的方法可以不断增加内容, 
而String则不可以,并且相同的字符串对象是相同的地址引用, 
若要String改变值,需要改变String变量的引用(指向新的对象)。 
(2)== 是对引用进行判断,对内存地址的判断 
equals()是判断引用的值是否相等,对实际存储的值的判断 
内存地址相同的值一定相同,但值相同的内存地址就不一定相同
(3)char可以放下一个中文字符,因为java采用的是unicode编码,一个字符为两个字节
二,写一个字符串反转的方法,把“abcdefg”转换成“gfedcba”。
public class Ex2 {
public static void main(String[] args) {
// TODO code application logic her
String str = "abcdefg";
StringBuffer sb = new StringBuffer(str);
sb = sb.reverse();
System.out.println(sb); 
}
}
运行结果:
run:
gfedcba
三,替换字符串,把“abc.abc.abc”替换成“abc/abc/abc”。
public class Exchange {
public static void main(String[] args) {
// TODO code application logic here
String a = "abc.abc.abc"; 
String b = a.replaceAll("\\.", "/");
System.out.println(b);
}
}
运行结果:
run:
abc/abc/abc
四,日期处理,取得从1970到现在的毫秒数,格式为yyyy-MM-dd-HH:mm:ss再转换成String输出。
public class Date {
public static void main(String[] args) {
// TODO code application logic here
java.util.Date date = new java.util.Date(); 
//取得从1970年到现在的毫秒数 
long now = date.getTime(); 
//格式化日期 
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
//转为字符串 
String dateStr = df.format(date); 
System.out.println(dateStr);
}
}
运行结果:
run:
2016-02-29 22:39:37
五,写一个函数,例如:给你的 a b c 则输出 abc acb bac bca cab cba 。
public class Ex1 {
public static void main(String[] args) {
// TODO code application logic here
test("abc");
}
private static void test(String s) {
if(null!=s&&s.length()>0)
{
char[] c = s.toCharArray();
sort("",c);
}
}
运行结果:
run:
abc
acb
bac
bca
cab
cba
成功构建 (总时间: 0 秒)
六,不使用中间变量 把两个变量的值互换 。
public class Ex3 {


/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
int a=3,b=4;
a=a*b;
b=a/b;
a=a/b;
System.out.println(a);
System.out.println(b);
}
}
运行结果:
run:
4
3
七,冒泡排序
public class Maopao {
public static void main(String[] args) {

// TODO code application logic here
int s[] = {1, 5, 4, 3, 7, 10, 8, 6};
for (int i = 0; i < s.length -1; i++){ 
for(int j = 0 ;j < s.length - i - 1; j++){ 
if(s[j] < s[j + 1]){ //把小的值交换到后面
int temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;

}

System.out.print("第" + (i + 1) + "次排序结果:");
for(int a = 0; a < s.length; a++){
System.out.print(s[a] + "\t");
}
System.out.println("");
}
System.out.print("最终排序结果:");
for(int a = 0; a < s.length; a++){
System.out.print(s[a] + "\t");

}
}
运行结果:
第1次排序结果:543710861
第2次排序结果:547108631
第3次排序结果:571086431
第4次排序结果:710865431
第5次排序结果:108765431
第6次排序结果:108765431
第7次排序结果:108765431
最终排序结果:108765431成功构建 (总时间: 0 秒)
八,输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
public class Tongji {
public static void main(String[] args) {
// TODO code application logic here
int i; 
int LetterCount = 0; 
int SpaceCount = 0; 
int NumberCount = 0; 
int OtherCount = 0; 

//输入一个字符串 
Scanner in = new Scanner(System.in); 
System.out.println("请输入一个字符串:"); 
String str = in.nextLine(); 
//字符串转换成字符数组 
char[]ch = str.toCharArray(); 
for(i = 0; i<str.length();i++){ 
if(Character.isLetter(ch[i])){ 
LetterCount++; 
}else if(Character.isSpaceChar(ch[i])){ 
SpaceCount++; 
}else if(Character.isDigit(ch[i])){ 
NumberCount++; 

else{ 
OtherCount++; 


System.out.println("字符的个数为:"+LetterCount); 
System.out.println("空格的个数为:"+SpaceCount); 
System.out.println("数字的个数为:"+NumberCount); 
System.out.println("其他字符个数为:"+OtherCount); 
}
}
运行结果:
请输入一个字符串:
12hdku。。。6
字符的个数为:4
空格的个数为:0
数字的个数为:3
其他字符个数为:6
九,编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
public class JieQu {
public int getLenBytes(String str) 

int len=0; 
byte[] b=str.getBytes(); 
len=b.length; 
return len; 

public String splitString(String str,int len) 

String string=""; 
//判断输入字符串是否为空 
if(str==null||str.equals("")) 
{ return ""; } 
//将字符串转换为char数组 
char[] s=str.toCharArray(); 
//判断是否越界 
if(len>s.length-1) 
{ return str; } 
int input=len; //获取截取长度 
int total=0; 
int count=0; //计数器 
for(char cc:s) 

total+=getLenBytes(String.valueOf(cc)); 
if(total>input) 
{ break; } 
count++; 


string=str.substring(0,count); //截取最终的字符串,以便进行输出 
return string; 

public static void main(String[] args) {
// TODO code application logic here
JieQu c=new JieQu(); 
String str="我ABC汉DEF"; 
System.out.println(c.splitString(str, 6)); 
}
}
运行结果:
我ABC
十,给你一组字符如{1,3,4,7,2,1,1,5,2},让你输出里面出现次数最多且数值最大的一个,出现几次
public class Tongji1 {
int Num1,Num2,count,secondCount=0;
int[] a= {1,3,4,7,2,1,1,5,2};
static int num;
public Tongji1(){
Arrays.sort(a);
System.out.println("最大数字为:"+a[a.length-1]);
for(int i=0;i<a.length;i++){
Num1=a[i]; 
count=0;
for(int j=0;j<a.length;j++){
Num2=a[j];
if(Num1==Num2){
count++; 
}

if(secondCount<=count){
secondCount=count; 
num=Num1; 

}
System.out.println("出现次数最多的数字:"+secondCount+"/数值为:"+num); 

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here 
new Tongji1();
}
}
总结与收获:
相对于前几天的学习,字符串对我还说难度稍微加大,需要细细总结多加锻炼。通过本次编程,结合数据结构课本以及学姐总结的算法排序,对于排序算法的原理有了进一步的认识和了解。此外,编程过程中还了解了一些新的知识,比如说java如何导入键盘输入的数据,方法是 Scanner scan = new Scanner(System.in);注意要在程序最上方加上import java.util,Scanner;
最后有一个问题还想问大家,java中是否可以直接使用swap函数?如果可以的话需要在开头导入什么?

0 0
原创粉丝点击