RxJava StringObservable

2023/05/10

1. StringObservable简介

在RxJava中处理字符串序列可能具有挑战性;幸运的是RxJavaString为我们提供了所有必要的工具。

在本文中,我们将介绍包含一些有用的字符串运算符的StringObservable。因此,在开始之前,建议先看一下RxJava简介

2. Maven设置

首先,让我们在依赖项中包含RxJavaString:

<dependency>
  	<groupId>io.reactivex</groupId>
  	<artifactId>rxjava-string</artifactId>
	<version>1.1.1</version>
</dependency>

最新版本的rxjava-string在Maven Central上可用。

3. StringObservable

StringObservable是一个方便的运算符,用于表示可能无限的编码字符串序列

运算符from读取一个输入流,创建一个Observable,它发出字节数组的字符边界序列:

Reactivex.io提供,在CC-BY下使用

我们可以使用from运算符直接从InputStream创建一个Observable:

TestSubscriber testSubscriber = new TestSubscriber();
ByteArrayInputStream is = new ByteArrayInputStream("Lorem ipsum loream, Lorem ipsum lore".getBytes());
Observable<byte[]> observableByteStream = StringObservable.from(is);

// emits 8 byte array items
observableByteStream.subscribe(testSubscriber);

4. 将字节转换为字符串

可以使用decode和encode运算符对来自不同字符集的无限序列进行编码/解码。

顾名思义,这些将简单地创建一个Observable,它发出编码或解码的字节数组或字符串序列,因此,如果我们需要处理不同字符集中的字符串,我们可以使用它

解码字节数组Observable:

TestSubscriber testSubscriber = new TestSubscriber();
ByteArrayInputStream is = new ByteArrayInputStream("Lorem ipsum loream, Lorem ipsum lore".getBytes());
Observable<byte[]> byteArrayObservable = StringObservable.from(is);
Observable<String> stringObservable = StringObservable
    .decode(byteArrayObservable, StandardCharsets.UTF_8);

// emits UTF-8 decoded strings,"Lorem ipsum loream, Lorem ipsum lore"
stringObservable.subscribe(testSubscriber);

5. 拆分字符串

StringObservable也有一些方便的运算符用于拆分字符串序列:split和byLine,它们都创建一个新的Observable,它按照模式对输入数据输出元素进行分块:

来自Reactivex.io

TestSubscriber testSubscriber = new TestSubscriber();
Observable<String> sourceObservable = Observable.just("Lorem ipsum loream,Lorem ipsum ", "lore");
Observable<String> splittedObservable = StringObservable.split(sourceObservable, ",");

// emits 2 strings "Lorem ipsum loream", "Lorem ipsum lore"
splittedObservable.subscribe(testSubscriber);

6. 连接字符串

与上一节的运算符互补的是join和stringConcat,它们连接来自String Observable的元素,在给定分隔符的情况下发出单个字符串。

另请注意,这些将在发出输出之前消耗所有元素。

来自Reactivex.io

TestSubscriber testSubscriber = new TestSubscriber();
Observable<String> sourceObservable = Observable.just("Lorem ipsum loream", "Lorem ipsum lore");
Observable<String> joinedObservable = StringObservable.join(sourceObservable, ",");

// emits single string "Lorem ipsum loream,Lorem ipsum lore"
joinedObservable.subscribe(testSubscriber);

7. 总结

对StringObservable的简要介绍展示了一些使用RxJavaString进行字符串操作的用例。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章