Java学习笔记(六)使用对象

时间:2021-01-24 15:34:51

6.1 字符类型

char 表示单个的字符
用”表示字符的面量
java使用unicode来表示字符,包括汉字在内的很多种语言
字幕和数组在unicode中是顺序排列的
大小写字母是分开排列的,并不在一起

6.2 逃逸字符

  • 用来表示无法打印出来的字符,用\表示
字符 意义 字符 意义
\b 回退一格 \” 双引号
\t 到下一个表格位 \’ 单引号
\n 换行 \| 反斜杠本身
\r 回车

6.3 包裹类型

  • 每个基础类型都有一个对应的包裹类型
基础类型 包裹类型
boolean Boolean
char Character
int Integer
double Double
Character 作用
static boolean isDigit(char ch) 判断这个字符是不是数字
static boolean isLetter(char ch) 判断这个字符是不是字母
static boolean isLetterOrDighter(char ch) 判断这个字符是不是字母或数字
static boolean isLowecase(char ch) 判断这个字符是不是小写字母
static boolean isUppercase (char ch) 判断这个字符是不是大写字母
static boolean iswhitespace(char ch) 判断这字符是不是一种空格
static boolean toLowercase (char ch) 把字符转换成小写
static boolean touppercase(char ch) 把字符转换成大写

6.4 字符串变量

String s= “hello”;
String是一个类,String是变量的管理者而不是所有者。

s.equals("bye")

.equals 比较2个字符串内容是否相等
字符串是对象,对他的所有操作都是通过“.”这个运算符完成的

s1.compareto(s2)

比大小,如果s1大为正,s1小为负,如果相等为0

s1.length();

s1的长度

s.charat(i)

访问字符串中的第i号字符

s.substring(n)
s.substring(b,e)

得到重n开始到结尾的字符串
得到重n开始到e之前的字符串

s.indexof(c)

得到c字符所在的位置,-1表示不存在

s.indexof(c,n)

重n开始查找c字符

s.indexof(t)

找到字符串t所在的位置

s.lastindexof(c)
s.lastindexof(c,n)
s.lastindexof(t)

重后往前找

s.startsWith(t)//查看是否已字符串开头
s.endsWith(t)//插卡是否已字符串结尾
s.trim()// 删除字符串两端的空格
s.replace(c1,c2)//把字符串中的c1替换成c2
s.toLowercase()//改成小写
s.toUppercase()//改成大写
switch(s)
{
case "this".....break;
case"that".....break;
}

在switch case中使用字符串要在java1.7版本后才可以

6.5 Math类

.abs 求绝对值
.pow 求幂次
.random 求随机数
.round 求四舍五入

**6.4 作业

单词长度

题目内容:

你的程序要读入一行文本,其中以空格分隔为若干个单词,以‘.’结束。你要输出这行文本中每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如“it’s”算一个单词,长度为4。注意,行中可能出现连续的空格。

输入格式:

输入在一行中给出一行文本,以‘.’结束,结尾的句号不能计算在最后一个单词的长度内。

输出格式:

在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。

输入样例:

It’s great to see you here.

输出样例:

4 5 2 3 3 4

import java.util.Scanner;

public class Duix {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        String s = new String();
        s = in.nextLine();
        int n = s.length();
        System.out.println(s.lastIndexOf("."));
        System.out.println(n);
        if(s.lastIndexOf(".")==n-1)
        {
            s = s.replace("."," ");
        }
        System.out.println(s);
        int i =0;
        while(i<s.length())
        {           
            s = s.substring(i);
            i = s.indexOf(' ')+1;
            System.out.print(i-1);
        }


    }

}

GPS数据处理

NMEA-0183协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine Electronics Associa-tion)制定的一套通讯协议。GPS接收机根据NMEA-0183协议的标准规范,将位置、速度等信息通过串口传送到PC机、PDA等设备。

NMEA-0183协议是GPS接收机应当遵守的标准协议,也是目前GPS接收机上使用最广泛的协议,大多数常见的GPS接收机、GPS数据处理软件、导航软件都遵守或者至少兼容这个协议。

NMEA-0183协议定义的语句非常多,但是常用的或者说兼容性最广的语句只有 GPGGA GPGSA、 GPGSV GPRMC、 GPVTG GPGLL等。

其中$GPRMC语句的样例如下:

$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50

这里整条语句是一个文本行,行中以逗号“,”隔开各个字段,每个字段的大小(长度)不一,这里的示例只是一种可能,并不能认为字段的大小就如上述例句一样。

    字段0:$GPRMC,语句ID,表明该语句为推荐最小定位信息

    字段1:UTC时间,hhmmss.sss格式

    字段2:状态,A=定位,V=未定位

    字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)

    字段4:纬度N(北纬)或S(南纬)

    字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)

    字段6:经度E(东经)或W(西经)

    字段7:速度,节,Knots

    字段8:方位角,度

    字段9:UTC日期,DDMMYY格式

    字段10:磁偏角,(000 - 180)度(前导位数不足则补0)

    字段11:磁偏角方向,E=东W=西

    字段16:校验值

这里,“”为校验和识别符,其后面的两位数为校验和,代表了“$”和“”之间所有字符(不包括这两个字符)的异或值的十六进制值。上面这条例句的校验和是十六进制的50,也就是十进制的80。

提示:^运算符的作用是异或。将$和之间所有的字符做^运算(第一个字符和第二个字符异或,结果再和第三个字符异或,依此类推)之后的值对65536取余后的结果,应该和后面的两个十六进制数字的值相等,否则的话说明这条语句在传输中发生了错误。注意这个十六进制值中是会出现A-F的大写字母的。另外,如果你需要的话,可以用Integer.parseInt(s)从String变量s中得到其所表达的整数数字;而Integer.parseInt(s, 16)从String变量s中得到其所表达的十六进制数字

现在,你的程序要读入一系列GPS输出,其中包含$GPRMC,也包含其他语句。在数据的最后,有一行单独的

END

表示数据的结束。

你的程序要从中找出 GPRMC2 GPRMC语句,以最后一条语句得到的北京时间作为结果输出。

测试数据保证了你的程序一定会读到一条有效的$GPRMC语句。

输入格式:

多条GPS语句,每条均以回车换行结束。最后一行是END三个大写字母。

输出格式:

6位数时间,表达为:

hh:mm:ss

其中,hh是两位数的小时,不足两位时前面补0;mm是两位数的分钟,不足两位时前面补0;ss是两位数的秒,不足两位时前面补0。

输入样例:

$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50

END

输出样例:

10:48:13

    import java.util.Scanner;  


    public class Gps {  
        public static boolean crx(String s)
        {
            char a;
            int sum =0;
            int crx1;
            boolean crx ;
            for(int i=1;i<s.indexOf('*');i++)  
            {  
                a = s.charAt(i);  
    // 
                sum = sum^a;//^异或运算符 
            }
            String s1 = s.substring(s.indexOf('*')+1);//将s中的字符串重第*个字母取出来 
            crx1 = Integer.parseInt(s1,16);//将s1中的整数取出来,将去除的16进制的数换算成10进制 
            if (crx1==sum)
            {
                return crx = true;
            }
            else
            {
                return crx = false;
            }
        }
        public static void time(int n)
        {
            int time = n;
            int hour;
            int minute;
            int second;
            if(time<99999)
            {
                time = time%100*10000+time/100%100*100+time/10000;
            }
            else
            {
                time = time%100*10000+time/100%100*100+time/10000;
            }                  
            hour =time%100;
            if(hour>=24)
            {
                hour = hour - 16;
            }
            else
            {
                hour = hour + 8;
            }
            minute = time/100%100;
            second = time/10000; 
            if(hour>9)
            {
                System.out.print(hour+":"+minute+":"+second);
            }
            else
            {
                System.out.print("0"+hour+":"+minute+":"+second);
            }            
        }

        public static void main(String[] args) {  
            // TODO Auto-generated method stub 
            Scanner in = new Scanner(System.in);  
            String s = in.nextLine();            
            int n;
            while(!s.equals("end"))
            {
                 if(crx(s))
                {
                    s = s.substring(s.indexOf(',')+1);  
                    s = s.substring(0,s.indexOf(','));
                    s = s.substring(0,s.indexOf('.'));
                    n = Integer.parseInt(s);
                    time (n);

                }
                s = in.nextLine();
            } 
            System.out.println("输入完成");
        }    

    }