chart13 字符串

13.1 不可变字符串

String类中每一个看起来会修改String值得方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容​

13.2 重载"+"与StringBuilder

+操作符每次都会新创建一个StringBuilder类的对象,并调用其上的append方法

显示的创建StringBuilder可以显示的指定其大小,若事先知道字符串的大小,那么可以预先指定tringBuilder对象的大小,从而避免多次重新的分配缓冲

若在编写类的时候用到toString()方法,当使用频率低时,可以使用"+"操作符,若使用频率高,如在循环中,则需要使用SringBuilder类

//: strings/UsingStringBuilder.java
import java.util.*;

public class UsingStringBuilder {
  public static Random rand = new Random(47);
  public String toString() {
    StringBuilder result = new StringBuilder("[");
    for(int i = 0; i < 25; i++) {
      result.append(rand.nextInt(100));
      result.append(", ");
    }
    result.delete(result.length()-2, result.length());
    result.append("]");
    return result.toString();
  }
  public static void main(String[] args) {
    UsingStringBuilder usb = new UsingStringBuilder();
    System.out.println(usb);
  }
} /* Output:
[58, 55, 93, 61, 61, 29, 68, 0, 22, 7, 88, 28, 51, 89, 9, 78, 98, 61, 20, 58, 16, 40, 11, 22, 4]
*///:~


13.3 无意识的递归​(有疑问  Object.toString()与this

//: strings/InfiniteRecursion.java
// Accidental recursion.
// {RunByHand}
import java.util.*;

public class InfiniteRecursion {
  public String toString() {
    return " InfiniteRecursion address: " + this + "\n";//这里发生了自动类型转换,递归调用toSt//ring()方法
  }
  public static void main(String[] args) {
    List<InfiniteRecursion> v =
      new ArrayList<InfiniteRecursion>();
    for(int i = 0; i < 10; i++)
      v.add(new InfiniteRecursion());
    System.out.println(v);
  }
} ///:~
如果真的想打印内存地址,那么这里应该调用Object.toString()方法,而在这里应该调用super.toString()

13.5 格式化输出

//: strings/SimpleFormat.java

public class SimpleFormat {
  public static void main(String[] args) {
    int x = 5;
    double y = 5.332542;
    // The old way:
    System.out.println("Row 1: [" + x + " " + y + "]");
    // The new way:
    System.out.format("Row 1: [%d %f]\n", x, y);
    // or
    System.out.printf("Row 1: [%d %f]\n", x, y);
  }
} /* Output:
Row 1: [5 5.332542]
Row 1: [5 5.332542]
Row 1: [5 5.332542]
*///:~

format与printf是等价的

13.5.3 Formatter

可以将Formatter当做一个翻译器,他将你的格式化字符串和数据翻译成你想要的结果,java.util.Formatter

//: strings/Turtle.java
import java.io.*;
import java.util.*;

public class Turtle {
  private String name;
  private Formatter f;
  public Turtle(String name, Formatter f) {
    this.name = name;
    this.f = f;
  }
  public void move(int x, int y) {
    f.format("%s The Turtle is at (%d,%d)\n", name, x, y);
  }
  public static void main(String[] args) {
    PrintStream outAlias = System.out;
    Turtle tommy = new Turtle("Tommy",
      new Formatter(System.out));
    Turtle terry = new Turtle("Terry",
      new Formatter(outAlias));
    tommy.move(0,0);
    terry.move(4,8);
    tommy.move(3,4);
    terry.move(2,5);
    tommy.move(3,3);
    terry.move(3,3);
  }
} /* Output:
Tommy The Turtle is at (0,0)
Terry The Turtle is at (4,8)
Tommy The Turtle is at (3,4)
Terry The Turtle is at (2,5)
Tommy The Turtle is at (3,3)
Terry The Turtle is at (3,3)
*///:~

当只需要使用format()方法一次的时候,我们可以使用String.format()方法,他的内部也是创建Formatter对象

//: strings/DatabaseException.java

public class DatabaseException extends Exception {
  public DatabaseException(int transactionID, int queryID,
    String message) {
    super(String.format("(t%d, q%d) %s", transactionID,
        queryID, message));
  }
  public static void main(String[] args) {
    try {
      throw new DatabaseException(3, 7, "Write failed");
    } catch(Exception e) {
      System.out.println(e);
    }
  }
} /* Output:
DatabaseException: (t3, q7) Write failed
*///:~


​13.6 正则表达式

​需要再看

### 回答1: 要使用Python绘制字符串和浮点数,你可以使用Python的Matplotlib库。下面是一个简单的示例代码,用于绘制包含字符串和浮点数的图形: ``` import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y1 = [1.0, 2.0, 3.0, 4.0, 5.0] y2 = [2.0, 4.0, 6.0, 8.0, 10.0] labels = ['one', 'two', 'three', 'four', 'five'] fig, ax = plt.subplots() ax.plot(x, y1, label='line 1') ax.plot(x, y2, label='line 2') for i, label in enumerate(labels): ax.text(x[i], y1[i], label) ax.legend() plt.show() ``` 这个代码会生成一个包含两条线和每个数据点上方的字符串的图形。你可以根据需要调整代码,以满足你的具体要求。 ### 回答2: 要在Python中绘制字符串与浮点数的图形,我们可以使用matplotlib库。首先,我们需要安装matplotlib库,可以通过在终端或命令提示符中运行以下命令进行安装: ``` pip install matplotlib ``` 接下来,可以在Python脚本中导入matplotlib库和numpy库: ```python import matplotlib.pyplot as plt import numpy as np ``` 然后,我们可以创建字符串和浮点数的列表,以便进行绘图。例如: ```python strings = ['A', 'B', 'C', 'D', 'E'] floats = [1.5, 2.3, 1.7, 2.8, 2.1] ``` 接下来,我们可以使用matplotlib的柱状图函数`bar`进行绘图。通过将字符串列表作为x轴,浮点数列表作为y轴,我们可以绘制出柱状图: ```python plt.bar(strings, floats) plt.xlabel('Strings') plt.ylabel('Floats') plt.title('String vs Float Bar Chart') plt.show() ``` 运行该脚本后,就会显示出字符串与浮点数的柱状图。 除了柱状图,我们还可以使用其他类型的图形来表示字符串与浮点数的关系,如折线图、散点图等。具体用法类似,只需调用相应的函数即可。 总结起来,要在Python中绘制字符串与浮点数的图形,我们可以使用matplotlib库,通过调用适当的绘图函数,传入字符串列表和浮点数列表作为x轴和y轴的坐标数据,以及一些可选的标签和标题等,最后通过`plt.show()`函数显示图形。 ### 回答3: 要使用Python绘制字符串和浮点数图表,我们可以使用Matplotlib库来完成这个任务。 首先,我们需要安装Matplotlib库,可以使用pip命令运行以下命令进行安装: ```python pip install matplotlib ``` 然后,导入Matplotlib库并创建一个图形对象,这里我们使用plt作为别名: ```python import matplotlib.pyplot as plt ``` 接下来,我们可以创建一个字符串列表来存储要绘制的字符串数据: ```python str_data = ['Apple', 'Banana', 'Orange', 'Peach', 'Grape'] ``` 然后,创建一个浮点数列表来存储要绘制的浮点数数据: ```python float_data = [2.5, 1.8, 3.2, 2.4, 2.9] ``` 我们可以使用plt.bar()函数创建一个柱状图来表示浮点数数据: ```python plt.bar(range(len(float_data)), float_data) ``` 接下来,我们可以使用plt.xticks()函数来设定x轴的刻度,并使用str_data列表中的字符串作为标签: ```python plt.xticks(range(len(float_data)), str_data) ``` 最后,我们可以使用plt.show()函数来显示图形: ```python plt.show() ``` 综上所述,以上代码段展示了使用Matplotlib库绘制字符串和浮点数图表的基本步骤,我们可以根据需要进一步自定义图表的样式和格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值