首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将全宽度ASCII字符转换为正常ASCII字符的Dart函数

将全宽度ASCII字符转换为正常ASCII字符的Dart函数
EN

Stack Overflow用户
提问于 2022-02-23 08:46:08
回答 1查看 283关注 0票数 1

我希望将全宽度ASCI转换为普通的ASCII字符。我们是否有任何内置的方法或包来转换它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-23 10:38:34

我不确定是否有这样的方法。

如果没有,您可以编写自己的字符串扩展。

扩展

代码语言:javascript
复制
extension StringX on String {
  
  static const fullWidthRegExp = r'([\uff01-\uff5e])';
  static const halfWidthRegExp = r'([\u0021-\u007e])';
  static const halfFullWidthDelta = 0xfee0;

  String _convertWidth(String regExpPattern, int delta) {
    return replaceAllMapped(RegExp(regExpPattern),
    (m) => String.fromCharCode(m[1]!.codeUnits[0] + delta)
    );    
  }
  
  String toFullWidth() => _convertWidth(halfWidthRegExp, halfFullWidthDelta);
  String toHalfWidth() => _convertWidth(fullWidthRegExp, -halfFullWidthDelta);

}

用法

在字符串扩展名中考虑的字符范围的用法。

代码语言:javascript
复制
void main() {
  final myStr = '!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~';
  print(myStr);
  print(myStr.toHalfWidth());
  print(myStr.toHalfWidth().toFullWidth());
}
代码语言:javascript
复制
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71233774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档