Flutter, Dart Split sentence every one character to 2 characters size, for flutter custom tts 项目

Flutter, Dart Split sentence every one character to 2 characters size, for flutter custom tts project

示例:

var sentence =(你好,我是鲍勃。)

var 结果 = [ 'he', 'el', 'll', 'lo', ' ', 'th', 'he', 'er', 're', ',', ' ', 'I', ' ', 'am', ' ', 'bo', 'ob', '.']

我在这里找到了工作示例,虽然它在 Javascript 中,但我真的不知道如何将它用于 Dart,并且不确定一旦白色 space 和标点符号被添加进来。标点符号和白色space我总是需要单独拆分而不是与字母组合,我也需要它们,因为我将使用它们来在单词和句子之间添加停顿。

谢谢

    var a = 12345678;
    a= a.toString();
    var arr=[];
    for (var i =0; i<a.length-1; i++) {
     arr.push(Number(a[i]+''+a[i+1]));
    }
    
    console.log(arr);

您可以使用正则表达式来拆分句子。例如:

void main() {
  var exp = RegExp('([A-Za-z]{1,2}|[,!.?\s ])');
  var str = "hello there, I am Bob.";
  var matches = exp.allMatches(str);

  for (var m in matches) {
    print(m.group(0));
  }
}

这会在 1 组或 2 组中查找字母(A-Z 或 a-z),或单个标点字符 (,!.?) \s 代表白色 space.

运行 以上会产生:

he
ll
o
 
th
er
e
,
 
I
 
am
 
Bo
b
.

另一种方法

void main() {
    var a = "1234!5678";
    a = a.toString();
    var arr = [];
    for (var i = 0; i < a.length - 1; i++) {

        if (a[i + 1] == '!') {
            continue;
        }
        if (a[i] == '!') {
            arr.add(a[i]);
            continue;
        }
        arr.add(a[i] + '' + a[i + 1]);

    }

    print(arr);
}

我不太了解 dart 但我在 dartpad 上写了这个简单的算法并且它有效

如果有人遇到同样的问题,我就是这样解决的

void main(String string) {
var test = "I Hello there I am Bob 23!";

List<String> nameArray = test.split('');

for (int curIndex = 0; curIndex < nameArray.length; curIndex++) {

if (curIndex >= 1 && nameArray[curIndex].contains(new RegExp(r'[a-zA-Z]')) && nameArray[curIndex-1].contains(new RegExp(r'[a-zA-Z]'))) {
      print(nameArray[curIndex-1] + nameArray[curIndex]); // checks if current curIndex and previous curIndex are letters, if so returns previous and curent letters joined
    } else {
if  (curIndex >= 1 && nameArray[curIndex].contains(new RegExp(r'[a-zA-Z]')) && nameArray[curIndex+1].contains(new RegExp(r'[a-zA-Z]'))) {
      null; // checks if curIndex and next curIndex are letters, if so returns null
  }else{
    print(nameArray[curIndex]);
  }

}
}
}

哪个returns

I

He
el
ll
lo
 
th
he
er
re
 
I
 
am
 
Bo
ob
 
2
3
!