字符串,扩展题:单链表,约瑟夫
JAVA(字符串)
心理总结:通过对字符串的复习,对字符串有了新的认识和理解
String也有属性,方法,构造器
Scanner sc=new Scanner(System.in);
//s1 String类的对象
String s1="abc";
//创建对象使用构造器
String ss="abc";
String s2=new String("abc");
String s3=new String("abc");
System.out.println(s1 == s2);//false
System.out.println(s2 == s3);//false
System.out.println(s1 == ss);//true
String s4=sc.next();//输入abc
System.out.println(s4 == s1);//false
区别图解:

字符串特点:
- 字符串不能用==比较,他比较的时虚地址,内存中的存储位置
- String一旦声明不可该改变
字符串常用方法:
- length() 取得字符串的长度,和数组长度区别:数组length是属性,字符串length()是方法
- 对象名.equals(String 类型参数),返回值boolean类型true,false
- indexOf()字符寻找位置,返回int,lastIndexOf(),从后往前找
- String 类的 indexOf()方法在字符串中查找子字符串出现的位置,如过存在返回字符串出现的位置(第一位为0),如果不存在返回 -1
- 字符串函数 substring()函数来删除字符串中的一个字符
- replace方法可以替换字符串中的字符
String str="Hello World,Hello Java.";
System.out.println(str.replace('H','W')); //替换全部
System.out.println(str.replaceFirst("He","Wa")); //替换第一个遇到的
System.out.println(str.replaceAll("He", "Ha")); //替换全部
- Javareverse()可字符串反转
- split(string)方法通过指定分隔符将字符串分割为数组。
String str="www-baidu-com";
String[] temp;
String delimeter = "-"; //指定分隔符
temp = str.split(delimeter); //分割字符串
//普通for循环
for(int i =0; i < temp.length; i++){
System.out.println(temp[i]);
System.out.println("");
}
- String toUpperCase() 方法将字符串从小写转为大写
- concat() 连接两个字符串
- trim() 去掉起始和结尾的空格
- valueOf() 转换为字符串
- charAt() 截取一个字符
- contains() 方法用于判断字符串中是否包含指定的字符或字符串
- substring(),截取字符串;substring(1),字符串下标包括1之后的;substring(0,3),字符串0到2,不包括3
- startswith("a",2)是不是以什么开头,从2开始
- endswith()是不是以什么结尾
- equalscase() 忽略大小写
包装器类型
- Byte
- Short
- Integer
- Long
- Double
- Float
- Character
- Boolean
自动装箱:基本数据类型转包装器类型Interger i=Integer.valueOf(50);
自动拆箱:包装器类型转基本数据类型int i1=i.intValue();
JDK1.5之后:
- 自动装箱,自动拆箱
- 增强for循环
- 枚举
JDK1.7之后
- switch case
案例:
- 转字符串:
int i=10;
// String s=i+"";
String s=String.valueOf(i);
System.out.println(s);
//其他类型转字符串
- 字符串转字符数组
String arr2="1234567";
char[] aa=new char[10];
aa=arr2.toCharArray();
for (char c : aa) {
System.out.print(c+" ");
}
- 字节数组
byte b[]=arr2.getBytes();
for (byte b1 : b) {
System.out.print(b1+" ");//转Ascii码,字节数组在操作文件
}
- 一个字符串在另一个字符串出现次数
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s = "woaichina,chinabutongyubaima,wulunchinahaishijpan,zhaodaogongzuojiushihaoma";
String sub = "china";
int fu = zifu(s, sub);
System.out.println(sub+"在字符串中出现了"+fu+"次");
}
public static int zifu(String s,String sub) {
int oldlen=s.length();
String re="";
if(s.contains(sub)){
re=s.replace(sub,"");
}
int newlen=re.length();
int c=(oldlen-newlen)/sub.length();
return c;
}
- 获取身份证信息
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String n1= scanner.next();
//倒数第二位,奇数男,偶数女,
fu(n1);
}
public static void fu(String n){
String y=n.substring(6,10);
String m=n.substring(10,12);
String date=n.substring(12,14);
System.out.println(y+"年"+m+"月"+date+"日");
int sex=(int)n.charAt(16);
if(sex%2==0){
System.out.println("女");
}else if(sex%2!=0){
System.out.println("男");
}
int y1=Integer.parseInt(y);
Date dt=new Date();
int year=dt.getYear();//122
int Year=year+1900;
System.out.println("年龄"+(Year-y1));
}
扩展题 1:单链表
查看代码
package mxduixiang.danlianbiao;
class Node {
private Object data;// 数据区
private Node next; // 节点区
// 构造方法
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
public class Kuo {
public static void main(String[] args) {
// 测试
LinkedList list = new LinkedList();
// list.addTail(1);
// list.addTail(2);
// list.addTail(3);
// list.addTail(4);
// list.prtn();
list.addHead(1);
list.prtn();
list.addHead(2);
list.addHead(3);
list.addHead(4);
list.prtn();
list.addIndex(5,3);
list.find(2);
System.out.print("采用头插法的链表是:");
list.prtn();
list.delete(3);
list.prtn();
list.delete(2);
list.prtn();
}
}
查看代码
package mxduixiang.danlianbiao;
public class LinkedList {
private Node head;
private int length;
public LinkedList(){
head=new Node();//()里null null
length=0;
}
//头插法
public void addHead(Object item){
Node temp = new Node();
temp.setData(item);
temp.setNext(head.getNext());
head.setNext(temp);
this.length++;
}
//尾插法
public void addTail(Object item){//问题
Node temp = new Node();
temp.setData(item);
Node r=head;
for (int i=0;i<length;i++){
r=r.getNext();
}
temp.setNext(r.getNext());
r.setNext(temp);
this.length++;
}
//指定位置添加
public void addIndex(Object item,int index){
//找到要插入节点的前一个结点
Node xin = new Node();
xin.setData(item);
Node temp = head.getNext();
for (int i = 1; i < index; i++) {
if(temp.getData()!=item)
temp=temp.getNext();
}
xin.setNext(temp.getNext());
temp.setNext(xin);
this.length++;
}
// 查找指定位置的节点
public void find(int index) {
Node temp = head.getNext();//自己加的
for (int i = 1; i < index; i++) {
temp=temp.getNext();
}
System.out.println("链表中第" + index + "节点的值是:" + temp.getData());
}
// 删除
public void delete(int index) {//问题
if (index < 1 | index > 5) {
System.out.println("位置非法!");
}
Node temp = head;//Node temp = head;
Node temp1 = head;
// 找到要删除节点的前一个节点
int c=0;
while(temp!=null&&c<index-1){
temp=temp.getNext();
temp1=temp.getNext();
c++;
}
// temp1=temp.getNext();//申请新节点导致断链
temp.setNext(temp1.getNext());
this.length--;
}
// 打印链表
public void prtn() {
Node temp = head.getNext(); // 指向第一个元素节点
while (null != temp) {
System.out.print(temp.getData() + " ");
temp = temp.getNext();
}
System.out.println("长度为" + this.length);
}
}
问题二:约瑟夫问题
查看代码
package mxduixiang.kuozhan;
class Node {
private Object data;// 数据区
private Node next; // 节点区
// 构造方法
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
public class Kuo {
public static void main(String[] args) {
// 测试
LinkedList list = new LinkedList();
list.addTail();
System.out.println();
Node t=new Node();
list.x();
System.out.println();
// list.prtn();
}
}
查看代码
package mxduixiang.kuozhan;
public class LinkedList {
private Node head;
private int length;
public LinkedList(){
head=new Node();//()里null null
length=0;
}
// public void addHead(Object item){
// Node temp = new Node();
// temp.setData(item);
// temp.setNext(head.getNext());
// head.setNext(temp);
// this.length++;
// }
//尾插法
// public void addTail(Object item){//问题
// Node temp = new Node();
// temp.setData(item);
//
// Node r=head;
// for (int i=0;i<length;i++){
// r=r.getNext();
// }
//
// temp.setNext(r.getNext());
// r.setNext(temp);
//
// this.length++;
// }
public void addTail(){//问题
head.setData(1);
length=1;
Node r=head;
for (int i=2;i<=41;i++){
Node t=new Node();
t.setData(i);
t.setNext(r.getNext());
r.setNext(t);
r=t;
length++;
}
r.setNext(head);
// System.out.println(length+" "+r.getData());//31
}
public void x(){
Node n=head;
Node n1=null;
while(length>1){
for (int i = 1; i < 2; i++) {
n=n.getNext();//2
}
n1=n.getNext();
n.setNext(n1.getNext());
length--;
n=n.getNext();
}
System.out.println(n.getData());
}
// // 打印链表
// public void prtn() {
// Node temp = head.getNext(); // 指向第一个元素节点
// int i=1;
// while (i<=length) {
// System.out.print(temp.getData() + " ");
// temp = temp.getNext();
// i++;
// }
// System.out.println("长度为" + this.length);
//
// }
}

浙公网安备 33010602011771号