第三章 Java的基本程序设计结构 | 学习笔记(二)

3.6 字符串

Java字符串就是Unicode字符序列。

例如:
String e = "";
String greeting = "Hello";
  • 子串

String类的substring方法可以从一个较大的字符串提取一个子串。

例如:
String greeting = "Hello";
String s = greeting.substring(0,3);//Hel

substring的工作方式有点:容易计算子串的长度。字符串s.substring(a,b)的长度为b-a。

  • 拼接

Java语言允许使用+号连接两个字符串。

例如:
System.out.println("The answer is " + answer);

如果需要把多个字符串放在一起,用一个定界符分隔,可以使用静态join方法。

例如:
String all = String.join(" / ", "S", "M", "L", "XL");
// all is the string "S / H / L / XL"
  • 不可变字符串

String类没有提供用于修改字符串的方法。可以通过拼接方法进行修改。
原因:String类底层是final修饰的。

  • 检测字符串是否相等

可以使用equals方法检测两个字符串是否相等。

例如:
s.equals(t);//相等返回true,否则false
Hello".equals(greeting);
Hello".equalsIgnoreCase("hel1o");//不区分大小写的比较

一定不要使用==运算符检测两个字符串是否相等!此运算符只能确定两个字符串是否放置在同一个位置。

  • 空串与Null串

空串""是长度为0的字符串。即长度为0、内容为空。Null串则是没有任何对象与该变量关联。

  • 码点与代码单元

  • String API

• char charAt (int index)
    返回给定位置的代码单元。除非对底层的代码单元感兴趣, 否则不需要调用这个方法。
• int codePointAt(int Index) 5.0
    返回从给定位置开始的码点。
• int offsetByCodePoints(int startlndex, int cpCount) 5.0
    返回从 startlndex 代码点开始,位移 cpCount 后的码点索引。
• int compareTo(String other)
    按照字典顺序,如果字符串位于 other 之前, 返回一个负数;如果字符串位于 other 之后,返回一个正数;如果两个字符串相等,返回 0。
• IntStream codePoints() 8
    将这个字符串的码点作为一个流返回。调用 toArray 将它们放在一个数组中。
• new String(int[] codePoints, int offset, int count) 5.0
    用数组中从 offset 开始的 count 个码点构造一个字符串。
• boolean equals(0bject other)
    如果字符串与 other 相等, 返回 true。
•boolean equalsIgnoreCase(String other )
    如果字符串与 other 相等 ( 忽略大小写,) 返回 tme。
•boolean startsWith(String prefix )
•boolean endsWith(String suffix )
    如果字符串以 suffix 开头或结尾, 则返回 true。
•int indexOf(String str)
•int indexOf(String str, int fromlndex )
•int indexOf(int cp)
•int indexOf(int cp, int fromlndex )
    返回与字符串 str 或代码点 cp 匹配的第一个子串的开始位置。这个位置从索引 0 或fromlndex 开始计算。 如果在原始串中不存在 str, 返回 -1。
•int lastIndexOf(String str)
•Int lastIndexOf(String str, int fromlndex )
•int lastindexOf(int cp)
•int lastindexOf(int cp, int fromlndex )
    返回与字符串 str 或代码点 cp 匹配的最后一个子串的开始位置。 这个位置从原始串尾端或 fromlndex 开始计算。
•int length( )
    返回字符串的长度。
•int codePointCount(int startlndex , int endlndex ) 5.0
    返回 startlndex 和 endludex-l之间的代码点数量。没有配成对的代用字符将计入代码点。參
• String replace( CharSequence oldString,CharSequence newString)
    返回一个新字符串。这个字符串用 newString 代替原始字符串中所有的 oldString。可以用 String 或 StringBuilder 对象作为 CharSequence 参数。
• String substring(int beginlndex )
• String substring(int beginlndex, int endlndex )
    返回一个新字符串。这个字符串包含原始字符串中从 beginlndex 到串尾或 endlndex-l的所有代码单元。
• String toLowerCase( )
• String toUpperCase( )
    返回一个新字符串。 这个字符串将原始字符串中的大写字母改为小写,或者将原始字符串中的所有小写字母改成了大写字母。
• String trim( )
    返回一个新字符串。这个字符串将删除了原始字符串头部和尾部的空格。
• String join(CharSequence delimiter,CharSequence ... elements ) 8
    返回一个新字符串, 用给定的定界符连接所有元素。
  • 构建字符串

StringBuilder类,允许采用多线程的方式执行添加或删除字符的操作。

3.7 输入输出

  • 读取输入

首先需要构建一个Scanner对象,并与“标准输入流”System.in关联。

Scanner in = new Scanner(System.in);

现在,可以使用Scanner类的各种方法实现输入操作。

例如:
    nextLine方法将输入一行
System.out.print("What is your name? ");
String name = in.nextLine();
    读取一个单词
String firstName = in.next();

• Scanner (InputStream in)
    用给定的输人流创建一个 Scanner 对象。
• String nextLine( )
    读取输入的下一行内容。
• String next( )
    读取输入的下一个单词(以空格作为分隔符。)
• int nextlnt( )
• double nextDouble( )
    读取并转换下一个表示整数或浮点数的字符序列。
• boolean hasNext( )
    检测输人中是否还有其他单词。
• boolean hasNextInt( )
• boolean hasNextDouble( )
    检测是否还有表示整数或浮点数的下一个字符序列。
  • 格式化输出
    在这里插入图片描述
例如:
System.out.printf("Hello,%s. Next year, you'll be %d", name, age);

在这里插入图片描述

例如:
Systen.out.printf("%.2f", 10000.0 / 3.0);//3,333.33

在这里插入图片描述
在这里插入图片描述

例如:
System.out.printf("%tc", new Date());//Mon Feb 09 18:05:19 PST 2015
  • 文件输入与输出

想要对文件进行读取,就需要用File对象构建一个Scanner对象。

例如:
Scanner in = new Scanner(Paths.get("myflle.txt"), "UTF-8");

3.8 控制流程

Java使用条件语句和循环结构确定控制流程。

  • 块作用域

块(即符合语句)是指由一对大括号起来的若干条简单的Java语句。块确定了变量的作用域。

例如:
public static void main(String[] args)
{
    int n;
    ...
    {
        int k;
        ...
    } // k is only defined up to here
}
  • 条件语句

条件语句格式:

if (condition) statement
例如:
if (yourSales >= target)
{
    performance = "Satisfactory";
    bonus = 100;
}

在这里插入图片描述

例如:
if (yourSales >= target)
{
    performance = "Satisfactory";
    bonus = 100 + 0.01 * (yourSales - target);
}
else
{
    performance = "Unsatisfactory";
    bonus = 0;
}

在这里插入图片描述

例如:
if (youSales >= 2 * target)
{
    performance = "Excellent";
    bonus = 1000;
    }
else if (yourSales >= 1.5 * target)
{
    performance = "Fine";
    bonus = 500;
}
else if (yourSales >= target)
{
    performance = "Satisfactory";
    bonus = 100;
}
else
{
    System.out.println("You're fired");
}
  • 循环

当条件为true时,while循环执行一条语句。
格式为:while { condition } statement

例如:
while (balance < goal)
{
    balance += payment;
    double interest = balance * interestRate / 100;
    balance += interest;
    years++;
}
    System.out.println(years + " years.");

循环体至少执行一次。
格式为:do statement while ( condition);

例如:
do
{
    balance += payment;
    double interest = balance * interestRate / 100;
    balance += interest;
    year++;
    // print current balance
    ...
   //if ready to retire and get input
    ...
}
while (input.equals ("N"));
  • 确定循环

for循环语句是支持迭代的一种通用结构,利用每次迭代之后更新的计数器或类似的变量来控制迭代次数。

例如:
for (int i = 1; i <= 10; i++)
    System.out.println(i);

在这里插入图片描述

  • 多重选择:switch语句
例如:
    System.out.print("Select an option (1, 2,3, 4)");
int choice = in.nextlnt();
switch (choice)
{
    case 1:
        ...
        break;
    case 2:
        ...
        break;
    case 3:
        ...
        break;
    default:
        // bad input
        ...
        break;
}

switch语句将从与选项值相匹配的case标签处开始执行直到遇到break语句,或者执行到switch语句的结束处为止。
在这里插入图片描述
case 标签可以是:

  • 类型为 char、byte、 short 或 int 的常量表达式。
  • 枚举常量。
  • 从 Java SE 7开始, case 标签还可以是字符串字面量。
例如:
Size sz = . . .;
switch (sz)
{
    case SMALL: // no need to use Size.SMALL
        ...
        break;
    }
  • 中断控制流程语句
终止流程语句
例如:
label:
{
    ...
    if (condition) break label;// exits block
    ...
}
...
// jumps here when the break statement executes

而continue语句则是跳出本次循环,继续下一次循环。

3.9 大数值

如果基本的整数和浮点数精度不能满足要求,那么可以使用java.math包中的两个类:BigInteger和BigDecimal。
BigInteger类实现了任意精度的整数运算,BigDecimal类实现了任意精度的浮点数运算。
使用静态的valueOf方法可以将普通的数值转换为大数值:

例如:
Biglnteger a = Biglnteger.valueOf(100);

不过,不能使用算术运算符处理大数值,而需要使用大数值的方法。

例如:
Biglnteger c = a.add(b);//c =a+ b
Biglnteger d = c.nultipiy(b.add(Biglnteger.valueOf(2)));// d = c * (b + 2)

3.10 数组

数组是一种数据结构,用来存储同一类型值的集合。

例如:
int[] a; 或者 int a[];
int[] a = new int[100];//可以存储100个整数的数组
for (int i = 0;i < a.length; i ++)
    System.out.println(a[i]);
  • for each 循环
增强for循环格式:
for (variable : collection) statement
例如:
   for (int element : a)
        System.out.println(element);
等价于
    for (int i = 0; i < a.length; i++)
        System,out.println(a[i]);        
  • 数组初始化以及匿名数组

Java中提供了一种创建数组对象并同时赋予初始值的简化书写形式。

例如:
int[] smallPrimes = { 2, 3, 5, 7, 11, 13 };

在Java中,允许数组长度为0。

new elementType[0];//数组长度为0与null不同
  • 数组拷贝

在Java中,允许将一个数组变量拷贝给另一个数组变量。

例如:
intQ luckyNumbers = smallPrimes;
1uckyNumbers[S] = 12; // now smallPrimes[5] is also 12

在这里插入图片描述

如果希望将一个数组的所有值拷贝到一个新的数组中去,就要使用Arrays类的copyOf方法:

例如:
int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers , luckyNumbers.length);
  • 命令行参数

每一个Java应用程序都有一个带String arg[]参数的main方法。这个参数表明main方法将接收一个字符串数组,也就是命令行参数。

例如:
public class Message
{
    public static void main(String[] args)
    {
        if (args.length ==0 || args[0].equals("-h"))
            System.out.print("Hello,");
        else if (args[0].equa1s("-gM"))
            System.out.print("Goodbye ,");
        // print the other command-line arguments
        for (int i=1; i < args.length; i ++)
            System.out.print(" "+ args[i]);
        System•out.println("!");
    }
}
如果使用下面这种形式运行这个程序:
    java Message -g cruel world
args数组将包含下类内容:
    args[0]:"-g"
    args[l]:"cruel"
    args[2]:"world"
将会出现以下信息:
    Goodbye, cruel world!
  • 数组排序

想要对数组型数组进行排序,可以使用Arrays类中的sort方法:

例如:
int[] a = new int[10000];
...
Arrays.sort(a)

此方法使用了优化的快速排序算法。

  • 多维数组

多维数组将使用多个下标访问数组元素,它适用于表示表格或更加复杂的排列顺序。

声明方式:double[][] balances;
例如:
int[][] magicSquare =
{
    {16, 3, 2, 13},
    {5, 10, 11, 8},
    (9, 6, 7, 12},
    {4, 15, 14, 1}
};
  • 不规则数组

Java实际上没有多维数组,只有一维数组。多维数组被解释为“数组的数组”。
不规则数组即数组的每一行有不同的长度。

例如:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 1 0 1 0 5 1
1 6 1 5 2 0 1 5 6 1

在这里插入图片描述

发布了14 篇原创文章 · 获赞 23 · 访问量 574

猜你喜欢

转载自blog.csdn.net/qq_41550921/article/details/103897943