Android如何正确的截取字符串/emoji子串.

这是一个简单的不能再简单的问题,然而,就是这样简单的常见问题,往往会被忽视,从而给未来的某一天埋坑。

大多数编程语言都提供了built-in 截取字符串的方法。

比如 Python最为简单直观,比如从”Hello, World!” 中提取出 World 可以通过下标直接获取

text = "Hello, World!"
substring = text[7:12]
print(substring) #print World

 在 JS 中,String 也提供

text = "Hello, World!"
substring = text.substring(7,12)
print(substring) //print 'World'

在 Android 中,Kotlin 和 Java 的 String 同样有类似的方法:

val text = "Hello, World!"
val substring = text.substring(7,12)
print(substring) //print 'World'

相信你也一定写过上面的代码,但是真的会如你的预期得到想要的结果吗?

一个字符串的下标,到底表示的是什么?

Continue reading “Android如何正确的截取字符串/emoji子串.”

Kotlin 范型中的in 和out 是什么?

我们看一些源码发现,一些源码,在范型前面添加了一些关键字 in 或者 out,这又是什么呢?比如 kotlin内置的 Comparable.kt

再比如,Collections.MutableIterable 接口

为什么会有一些加in,有一些加out 呢?了解这个之前我们来看下

范型是什么?

泛型(Generics)是一种允许类、接口和方法操作任意类型(类型参数)的特性。泛型提供了一种类型安全的方式来处理对象集合和其他数据结构,而无需在编译时指定具体的类型。

举一个栗子:

Continue reading “Kotlin 范型中的in 和out 是什么?”

Python将回调函数转为可迭代对象|convert callback into generator in Python

如今各种语法糖越来越方便,以前很多难以直观理解的代码,通过语法糖包装下,变得越来越好用,典型的有 lambda表达式,协程, flow, rx 等等,用起来是不亦乐乎。

很对第三方sdk也逐渐从传统的callbck形式逐渐提供flow形式的接口,让适用方能够比较自然的接入。

Continue reading “Python将回调函数转为可迭代对象|convert callback into generator in Python”