`

【笔记】基本的设计

 
阅读更多

        java中所有数值类型所占的字节数与平台无关,每一种数据的取值范围是固定的,int、short、long、byte分别占4,2,8,1个字节,float、double占4,8个字节。

 

        float类型有后缀F,没有后缀的浮点数默认为double类型,double类型的数据后缀可以加上D。

 

        char类型是用UTF-16编码描述的一个代码单元。

 

        变量名以字母开头由数字或者字母组成。大小写敏感,长度没有限制,不能是保留字,不能有空格、“+”等符号。

 

        类常量用static final修饰,final变量表示变量只能赋值一次,一旦赋值就不能改变。

 

        二元操作时数据转换规则:若一个数为double,另一个转换为double;否则,若一个为float,则另外一个转换为float;否则,若一个为long,另一个转换为long;否则,两个数都转换为int。

 

        枚举: enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};

                   Size s=Size.MEDIUM;

 

        String是不可变字符串,这样可以让编译器共享字符串,可以用equals方法来检查两个字符串的内容是否相同。而“==”检测两个字符串是否放在同一位置。

       

在java中char采用UTF-16编码的,也就是说,char是代表一个字符单元,占两个字节。

 

代码单元:UTF-8中是用8个字节表示的,UTF-16中使用16个字节表示的等等。

 

代码点:对应各种真正字符(char不是真正的字符,是代码单元)的Unicode编码。一个代码点可能对应一对代码单元,如辅助字符。

 char ch=str.charAt(2);获取代码单元,但是如果这个代码单元时某个代码点的一部分(它和另外一个代码单元构成一个代码点,如辅助字符),那么ch任然显示的是整个代码点。所以不建议使用char类型。

codePointAt获得代码点,可以用如下方式遍历代码点:

          int cp = aString.codePointAt(index);
                 if (Charater.isSupplementaryCodePoint(cp))

                    i += 2;
                   else
                            i++;

 

        StringBuilder是可变字符串。

        StringBuilder builder=new StringBuilder();

        builder.append(ch);    //append a character

        builder.append(str);    //append a string

 

        控制台输入:需要将标准输入System.in与一个Scanner对象关联

            Scanner in=new Scanner(System.in);

        Scanner有nextLine,next(以空格分开),nextInt,hasNext,hasNextInt等方法。

        控制台输出:用标准输出System.out

              System.out.printf可以控制输出格式。%后面加d,f,s,c表示十进制整数、浮点数、字符串、字符。System.out.printf("%8.2f",x);以宽为8,小数位数为2输出。

 

        文件输入:从文件中读取用    Scanner in=new Scanner(new File("C:\\mydir\\file.txt"));

这里反斜杠需要两个,如果文件不存在,那么会发生异常。

        文件输出:写入文件时需要用PrintWriter对象,  PrintWriter out=new PrintWriter("file.txt");

注意Scanner中参数为File,而PrintWriter中参数为String(文件名)。

 

        switch语句中,case标签必须是整数或枚举变量,不能测试字符串。

 

        java.math包中有两个表示大数据的类BigInteger和BigDecimal。其加减乘除用add、substract、mutiply、divide表示。

              BigInteger c=BigInteger.valueOf(100);

              BigInteger b=g.mutiply(BigInteger.valueOf(10000));

 

        数组是存储同一类型的数据的集合,它是引用类型。

        声明及初始化:int[] a;int a[];int b[]={2,3,5};  //左边不能有数据大小

        长度:array.length,长度可以为0

        for each: for(int x:b)   //遍历b

                               System.out.println(x);

还可以用如下方式打印数组:System.out.println(Array.toString(b));

        数组的拷贝:  int[] lucky={2,4,6};

                               int[] good=Array.copyof(lucky,lucky.length*2);   //good={2,4,6,0,0,0}

这里多余的元素赋值0,如果是boolean类型的,多余元素赋值为false。

        排序:int[] a=new int[1000];  ...  ...

                   Array.sort(a); //用快速排序将a从小到达排序

         多维数组的for each循环:

                  double[][] a=......;

                  for(double[] row:a)

                      for(double value:row)

                             System.out.println(value);

                      也可以用System.out.println(Array.deepToString(a));输出。

           不规则数组:java实际没有多维数组,只有一维数组,多维数组可以理解为是“数组的数组”。

                  int [][]  old=new int[4][];

                  for(int i=0;i<3;i++)

                       old[i]=new int[i+1];

 

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABCDEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。 

 

public class Test1 {
	public static void main(String[] args) throws UnsupportedEncodingException{
		split("我ABC",4);
		split("我ABC汉DEF",6);
		
		/**
		 * 对于UTF-8:‘我’占3个字节,‘a’占1个字节
		 * 对于java采用的UTF-16,‘我’占2个字节,‘a’占2个字节,不过他们前面貌似还有两个字节(feff),表示规则吧
		 * 所以‘我’.getBytes("UTF-8")得到4,‘我们’.getBytes("UTF-8")得到6
		 * 对于GBK,‘我’占两个字节,‘a’占一个字节
		 */
		//System.out.println("我a".getBytes("UTF-16").length);
		
	}
	
	public static void split(String source,int num) throws UnsupportedEncodingException{
		int k=0;
		String temp="";
		for (int i = 0; i <source.length(); i++){	
			byte[] b=(source.charAt(i)+"").getBytes("GBK");//"我".getBytes("UTF-8")得到3
			k=k+b.length;
			if(k>num){
				break;
			}
			temp=temp+source.charAt(i);			
		}	
		System.out.println(temp);
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics