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
!
示例:
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
!