Flutter移动端应用求助:含字母"A"的单词统计功能失效
问题排查与功能实现
核心问题分析
你当前的代码逻辑仅统计了输入文本按空格分割后的总单词数,完全未实现统计包含字母"A"(含大小写)的单词数量的需求,同时存在以下细节缺陷:
- 用
split(" ")分割文本时,连续空格会生成空字符串,导致单词数统计失真 - 未处理字母大小写,比如单词"apple"里的小写"a"会被忽略
修正后的代码实现
以下是调整后的完整代码,核心修改了onChanged回调内的计数逻辑:
import 'package:flutter/material.dart'; void main() => runApp(Myapp()); class Myapp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( backgroundColor: Colors.blueAccent, title: Text( "Laboratorul 2", style: TextStyle( color: Colors.white, ), ), ), body: WordCounter(), ), ); } } class WordCounter extends StatefulWidget { @override _WordCounter createState() => _WordCounter(); } class _WordCounter extends State<WordCounter> { int _wordcount = 0; @override Widget build(BuildContext context) { return Container( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[ Padding( padding: EdgeInsets.all(8), child: TextField( decoration: InputDecoration( labelText: "Introdu textul aici...", border: OutlineInputBorder( borderRadius: BorderRadius.circular(5.0), )), onChanged: (String str) { int temp = 0; // 按任意空白字符分割文本,过滤空字符串得到有效单词列表 List<String> words = str.split(RegExp(r'\s+')).where((word) => word.isNotEmpty).toList(); // 遍历单词,统计包含A/a的数量 for (String word in words) { if (word.toLowerCase().contains('a')) { temp++; } } setState(() { _wordcount = temp; }); }, ), ), Padding( padding: EdgeInsets.all(8), child: Text( "Numarul de cuvinte cu litera 'A' sunt : " + _wordcount.toString(), style: TextStyle( fontWeight: FontWeight.bold, fontSize: 25, ), ), ), ], ), ); } }
关键修改说明
- 使用
RegExp(r'\s+')分割文本:匹配任意数量的空白字符(空格、换行等),避免连续空格生成无效空字符串 - 添加
where((word) => word.isNotEmpty)过滤空条目,确保仅统计有效单词 - 用
word.toLowerCase().contains('a')统一转换为小写后判断,实现大小写不敏感的匹配 - 更新文本提示内容,让显示信息与功能需求一致
内容的提问来源于stack exchange,提问作者sorinsagara
相关产品推荐
相关产品推荐

