Oh!Coder

Coding Life

有趣的Processing-字符串

| Comments

Hello!上一次,我们先一起学习了Processing中文本的排版。在学习的过程中呢,我们捎带着用到了Processing中的字符串类型String,但上一次的学习核心在于文本的处理,所以对String并没有具体介绍,那这一次呢,我们就把焦点对准String,看看Processing中的String到底是怎么回事,以及通常情况下,我们如何使用。

什么是String

本质上来说,一个String类型的变量,就是一个char类型的字符数组。所以,可以将String看成是一个字符数组也是完全可以的,只是在语法层面不一样而已。下面,让我们还是用代码说明。

首先,还是新建一个项目窗口,如下图所示。

processing-new-window

图片来源:Processing新项目窗口

然后,将下面代码填入其中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 环境初始化。
// 此方法在软件启动时,被系统调用一次。
void setup() {
  // 定义字符串变量 message,
  // 并初始化其数值。
  String message = "some text here.";
  // 定义字符变量 c
  // 并调用String类型提供的
  // charAt() 方法获取字符串中
  // 第三个字符。注意,字符串
  // 的起始下标为0,所以此处的3
  // 相当于第四个字符。
  char c = message.charAt(3);
  // 打印获取到的字符,
  // 此处为 'e'
  println(c);
}
// 画图。
// 此方法被系统默认循环调用。
void draw() {
  // 此处无代码
}

注意,此次代码里的draw()方法没有代码,所有代码都在setup()中。这个例子里,我们用到了String类型为我们提供的charAt()方法,用来获取指定位置的字母,其实从这个方法提供的功能里也可以看出,一个String变量可以看做是一个字符数组。

processing-window-menu

图片来源:Processing新项目窗口中的菜单栏

点击上图中的三角按钮,编译并运行,可以在调试窗口里,看到输出了一个字母’e’。

除此之外,String类型还为我们提供了其他便捷的辅助方法,比如length()方法,可以用来获取字符串的长度,toUpperCase()方法和toLowerCase()方法,可以将整个字符串改为全大、小写,equals()方法可以判断两个字符串是否相等。好,下面我们就一个一个的例子,来说明这些方法如何使用。

首先,我们先说length()方法,可以再新建一个项目窗口。将如下代码填入其中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 环境初始化。
// 此方法在软件启动时,被系统调用一次。
void setup() {
  // 定义字符串变量messsage,
  // 并初始化其数值。
  String message = "This String is 34 characters long.";
  // 通过String提供的length()方法
  // 获取message字符串的长度,
  // 并用println()方法将其打印出来
  println(message.length());
}
// 画图。
// 此方法被系统默认循环调用。
void draw() {
  // 此处无代码
}

点击项目窗口上,菜单栏里的三角按钮,编译并运行程序,可以在调试窗口里,看到输出一个阿拉伯数字34,这个数字的获取,就是通过String类型提供的length()方法获取的。

下面介绍toUpperCase()方法和toLowerCase()方法。这两个方法的功能正好相反,前一个是将字符串全部变为大写,后一个是将字符串全部变为小写。接下来,我们还是用一个小例子来说明。还是新建一个项目窗口,将如下代码填入其中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 环境初始化。
// 此方法在软件启动时,被系统调用一次。
void setup() {
  // 定义大写字符串,
  // 为了突出效果,
  // 这里将字符串所有字符定义为了小写字母。
  String uppercase = "this is upper case.";
  // 定义小写字符串,
  // 为了突出效果,
  // 这里将字符串所有字符定义为了大写字母。
  String lowercase = "THIS IS LOWER CASE.";
  // 打印大写字符串结果
  println(uppercase.toUpperCase());
  // 打印小写字符串结果
  println(lowercase.toLowerCase());
}
// 画图。
// 此方法被系统默认循环调用。
void draw() {
  // 此处无代码
}

点击项目窗口上的三角形按钮,编译并运行上面这段代码,不出意外,可以在调试窗口中看到两行字符串,发现字符串按照预期,分别转换成了对应的大小写字母。

好,接下来介绍最后一个equals()方法,这个方法是用来判断两个字符串是否相等的。有朋友可能有疑问,为啥不直接用==?还非要有这么一个方法呢?这个问题问得好!因为直接使用双等号比较的并不是字符串本身,而是两个字符串的内存地址,有时候这会导致bug的产生,因为并不是字符串本身,如果两个字符串的内存地址一样,就会返回true,但内存地址一样并不能说明两个字符串本身的字符相等,所以用==号做字符串的比较容易隐藏bug,所以为了避免这个问题,专门提供了equals()方法,来对两个字符串的字符逐一做比较,这样就不存在有bug的隐患了。

下面还是来举例说明,看看equals()方法如何使用。首先,还是新建一个项目窗口,然后填入如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 环境初始化。
// 此方法在软件启动时,被系统调用一次。
void setup() {
  // 定义第一个字符串
  String one = "hello";
  // 定义第二个字符串
  String two = "hello";
  // 打印两个字符串的比较结果
  println(one.equals(two));
}
// 画图。
// 此方法被系统默认循环调用。
void draw() {
  // 此处无代码
}

点击项目窗口中的三角形按钮,编译并运行这段代码,如果一切顺利,会在调试窗口看到”true”。这个方法的使用很简单,代码的展示也很清晰易懂,这里就不做过多的解释了。

最后,说一个两个字符串合并的小技巧。如果想将两个字符串合并到一起,最简单的方式是使用”+”号,比如:

1
String helloworld = "Hello" + "World";

还可以将字符串与一个变量进行合并,比如:

1
2
int x = 10;
String message = "The value of x is: " + x;

很简单,有兴趣的朋友,可以自己将上面的合并结果打印出来,看看是什么样子。

总结

这次我们比较有针对性的介绍了String类型,其中包括一些常用的辅助方法,具体有charAt()方法,length()方法,toUpperCase()方法和toLowerCase()方法以及equals()方法。最后还介绍了字符串合并的两个小技巧。

下期预告

下一次,我们将学习另一个文本类型,那就是text类型!

Comments