java学习笔记(五)

153 阅读4分钟

java.lang.string.split

split 方法 将一个字符串分割为子字符串,然后将结果作为字符串数组返回。

stringObj.split([separator,[limit]])

stringObj 必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。

separator 可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽 略该选项,返回包含整个字符串的单一元素数组。

limit 可选项。该值用来限制返回数组中的元素个数。

说明: split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解 。separator 不作为任何数组元素的部分返回。

示例1: public class SplitDemo {

public static String[] ss = new String[20];

public SplitDemo() {

​ String s = "The rain in Spain falls mainly in the plain."; ​ // 在每个空格字符处进行分解。 ​ ss = s.split(" "); }

public static void main(String[] args) {

​ SplitDemo demo = new SplitDemo(); ​ for (int i = 0; i < ss.length; i++) ​ System.out.println(ss[i]); }

}

程序结果: The rain in Spain falls mainly in the plain.

还有一些例子在blog.csdn.net/pengzonglu7…

找不到主类:包名写错了 main函数没写

next()与nextLine()区别: Scanner是一个扫描器,我们录取到键盘的数据,先存到缓存区等待读取,它判断读取结束的标示是 空白符;比如空格,回车,tab 等等。

next()方法读取到空白符就结束;

nextLine()读取到回车结束也就是“\r”;

所以没还顺序前测试的时候next()再检测的空格的时候就结束输出了。

区别:

1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串);

2)replaceAll的参数是regex,即基于正则表达式的替换,比如,可以通过replaceAll("\d", "*")把一个字符串所有的数字字符都换成星号;

相同点:

都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串,如果只想替换第一次出现的,可以使用replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第一次出现的字符串;

另外,如果replaceAll()和replaceFirst()所用的参数据不是基于规则表达式的,则与replace()替换字符串的效果是一样的,即这两者也支持字符串的操作;

还有一点注意::执行了替换操作后,源字符串的内容是没有发生改变的。

package com.atguigu.contact; import java.util.Scanner;

import java.lang.String;//与 java.util.Arrays;相同 可以不写

public class Test { public static void main(String[] args) { String s = "Today is a good day"; String[] ss = new String[20]; ss=s.split(" "); for (int i =0;i<5;i++) { System.out.println(ss[i]); } Scanner input = new Scanner(System.in); String s1 = input.nextLine(); input.close(); s.replace("a","b");//这里必须写在输出里面,因为s不会改变,只会重新创建一个 System.out.println(s1.replaceAll("a", "b"));

}

}

后缀表达式

规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。

9 3 1-3*+ 10 2/+ = 20 想象以前做加减法都是从前往后,现在是后面进栈的进行计算

A & 1 等价于 A % 2 用&的方式更加酷炫而已 可以用1111举例子

BigInteger类型的数字范围较Integer,Long类型的数字范围要大得多,它支持任意精度的整数,也就是说在运算中 BigInteger 类型可以准确地表示任何大小的整数值而不会丢失任何信息。

char[] ch = s.toCharArray();

	String s= "hello";
	char[] ch = s.toCharArray();//
	for (char c:ch)
	{
		System.out.println(c);//其实与.charAt(i)没什么区别

​ 使用BigInteger之前要import java.math.BigInteger

public void testBasic() { BigInteger a = new BigInteger("13"); BigInteger b = new BigInteger("4"); int n = 3;

	//1.加
	BigInteger bigNum1 = a.add(b);			//17
	//2.减
	BigInteger bigNum2 = a.subtract(b);		//9
	//3.乘
	BigInteger bigNum3 = a.multiply(b);		//52
	//4.除
	BigInteger bigNum4 = a.divide(b);		//3
	//5.取模(需 b > 0,否则出现异常:ArithmeticException("BigInteger: modulus not positive"))
	BigInteger bigNum5 = a.mod(b);			//1
	//6.求余
	BigInteger bigNum6 = a.remainder(b);	//1
	//7.平方(需 n >= 0,否则出现异常:ArithmeticException("Negative exponent"))
	BigInteger bigNum7 = a.pow(n);			//2197
	//8.取绝对值
	BigInteger bigNum8 = a.abs();			//13
	//9.取相反数
	BigInteger bigNum9 = a.negate();		//-13
}

类型 BigInteger 中的方法 remainder(BigInteger)对于参数(int)不适 用 这里不是很懂但是pow(int)可以

蓝桥杯:是否被一个数整除看的是余数 所以%

class Boy { int age; } class Girl { int age; public int compare(Boy boy) { return Math.max(age, boy.age );//可以不必再重新创造一个class来放入此方法 } }

package com.atguigu.contact; import java.util.Scanner;

import java.lang.String;//与 java.util.Arrays;相同 import java.math.BigInteger;

public class Test { public static void main(String[] args) { Customer person = new Customer("Jane","Smith"); person.setAccount(1000,0.0123,2000,100,960,2000); person.getAccount();

}

} class Account { private int id; private double balance; private double annualInterestRate; public int getId() { return id; } public void setId(int id) { this.id = id; } public double getBalance() { return balance; } public void setBalance(double balance) { this.balance = balance; } public double getAnnualInterestRate() { return annualInterestRate; } public void setAnnualInterestRate(double annualInterestRate) { this.annualInterestRate = annualInterestRate; } public void withdraw(double amount) { if(balance>amount) { System.out.println("取钱成功"); balance-=amount; }else { balance-=amount; System.out.println("余额不足请充值"); }

}
public void deposit(int money)
{
	balance+=money;
}

} class Customer { private String firstName; private String lastName; private Account account;//这里只写了前面一半 相当与int i 后面的=1 为 this.account=account(形参) public Customer(String f,String l) { f=firstName; l=lastName; } public String getFirstName() { return firstName; } public String getLastName() { return lastName;

}
public void setAccount(int id,double annual,int balance,int cun,double qu, double quqian)
{
	account = new Account();//必须新建 下面才能调用
	//account.id=id;//????因为这里不能调用
	account.setId(id);//不用new也行????
	account.setAnnualInterestRate(annual);
	account.setBalance(balance);
	account.deposit(cun);
	account.withdraw(qu);
	account.withdraw(quqian);
}
public void getAccount()//这里可以修改为 public Account getAccount() 再return Account 最后调用时person.getAccount().id
{
	System.out.println(account.getAnnualInterestRate());
	System.out.println(account.getBalance());
	System.out.println(account.getId());
}

}

3.7

下次private全部属性之后直接快捷键把get set创建出来

package com.atguigu.contact;

class Test { public static void main(String[] args) { Bank bank = new Bank(); bank.addCustomer("Jane","Smith"); Account one = new Account(2000); bank.getCustomer(0).setAccount(one);//Customer[0]的账户 bank.getCustomer(0).getAccount().withdraw(500); System.out.println(bank.getCustomer(0).getAccount().getBalance()); System.out.println(bank.getCustomer(0).getLastName()); } } class Account { private double balance; public Account(double balance) { this.balance=balance; } public double getBalance() { return balance; } public void deposit(double amt) { balance+=amt; } public void withdraw(double amt)//没想到上下两个形参可以一样(想象重载) { if(amt>balance) { System.out.println("余额不足,请充值"); }else { balance-=amt; } } } class Customer { private String firstName; private String lastName; private Account account;//这里只写了前面一半 相当与int i 后面的=1 为 this.account=account(形参) public Customer(String f,String l) { f=firstName;//这里赋值反了 l=lastName; } public String getFirstName() { return firstName; } public String getLastName() { return lastName;

}
public Account getAccount()
{
	
	return account;
}
public  void setAccount(Account account)//这里是巧妙地将两个类结合再一起
{
	this.account=account;//设置上面地private Account地原因
}

} class Bank//这个类就没有声明什么银行了而是在用customer { private Customer[] customer=new Customer[100];//与上面private Accoun一样都是为了调用 private int numberOfCustomer=0; public Bank() {

}
public void addCustomer(String f,String l)
{
	Customer cust = new Customer(f,l);              //customer=new Customer[4];//这里想象main中也是这么用的其它类的构造器

// customer[3].getFirstName()=f; // customer[3].getLastName()=l; //customer[3]= new Customer(f,l);//这里不熟练 黑色是修改后地 customer[numberOfCustomer]=cust; numberOfCustomer++; } public int getNumberOfCustomer() { return numberOfCustomer; } public Customer getCustomer(int index) { return customer[index]; } }

package:

1实现类的管理

2包名都小写

3每.一次都是一层目录

4不同包下可以命名同名的接口与类()因为此时目录不同

java.lang默认添加 lang表language

不用学awt swing

MVC M:模型层 有很多数据 可供调用V:视图层 例如微信上的联系人 下面的朋友圈之类的有图案 长宽的,C:控制层 将M中的数据装入V中其实除了M和V之外的东西好像都是C