QT 如何在文件中查找是不是有该字符或字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT 如何在文件中查找是不是有该字符或字符串?相关的知识,希望对你有一定的参考价值。

如有一 "abc.txt" 文件,内容为:abcdEFGH123456 部分代码:QFile file("abc.txt");QString string="abc";char a='a'; 如何在abc.txt文件中查找是否有"abc"这个字符串或"a"这个字符?也就是如何实现:abc.txt文件的内容中是否有"abc"这个字符串或"a"这个字符?

1、在 Qt 中,默认的编码是 Unicode,书写的代码文件被强制转换为 utf8,但是,在简体中文版的 Windows 操作系统中,默认编码却是 GBK。

2、因此,在编译 Qt 程序时,如果代码中含有特定中文字符,Qt 的编译器就会发生误判,向我们报告“常量中有换行符”。

3、这时需要打开Qt Creator,点击菜单“工具”-“选项”。

4、在“文本编辑器”-“行为”选项卡中,将文件编码更改为 UTF-8,并且选择“如果编码是UTF-8则添加”。

5、或者,在代码中用 QString.toLocal8Bit( ) 将 Unicode 编码转换为本地系统编码,就完成了。

参考技术A 把文件中所有内容一行一行读进来存到一个QString里
QFile file("in.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;

QTextStream in(&file);
while (!in.atEnd())
QString line += in.readLine();


然后调用line的indexOf或者count方法来查找子串
参考技术B      QFile file("in.txt");
     if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
         return;

     QTextStream in(&file);
     while (!in.atEnd()) 
         QString line += in.readLine();
     

参考技术C QFile file("abc.txt");QString string="abc";char a='a';QString check;if(!file.open(QFile::ReadOnly | QFile::Text))

QMessageBox::warning(this,tr("错误提示"),tr("打开文件失败!"),QMessageBox::Ok);
return 0;
check=file.readAll();//一、查找是否有括号里的字符或字符串,如果有,返回1,如果无,返回0check.contains(string); 如果要忽略大小写,带参数:check.contains(string,Qt::CaseInsensitive);//二、查找是否有括号里的字符或字符串,如果有,返回当前位置(如例,返回0),如果无,返回-1,注意位置是从0开始的check.indexOf(string);//都可以带很多参数file.close();
参考技术D 正则表达式呗

如何在 JavaScript/jQuery 中查找数组是不是包含特定字符串?

【中文标题】如何在 JavaScript/jQuery 中查找数组是不是包含特定字符串?【英文标题】:How to find if an array contains a specific string in JavaScript/jQuery?如何在 JavaScript/jQuery 中查找数组是否包含特定字符串? 【发布时间】:2011-09-01 06:27:05 【问题描述】:

谁能告诉我如何检测"specialword" 是否出现在数组中?示例:

categories: [
    "specialword"
    "word1"
    "word2"
]

【问题讨论】:

纯 JS 中:***.com/a/25765186/1320932 纯JS:categories.includes("specialword") @patz 注意纯 JS,IE(任何版本)不支持 link @foxont​​herock 开始使用转译器 - 不要担心任何事实检查,我可以使用这个属性之类的事情。 【参考方案1】:

你真的不需要 jQuery。

var myarr = ["I", "like", "turtles"];
var arraycontainsturtles = (myarr.indexOf("turtles") > -1);

提示:indexOf返回一个数字,表示指定的searchvalue第一次出现的位置,如果从未出现则返回-1 发生

function arrayContains(needle, arrhaystack)

    return (arrhaystack.indexOf(needle) > -1);

值得注意的是array.indexOf(..) 是not supported in IE < 9,但是jQuery 的indexOf(...) 函数即使对于那些旧版本也可以工作。

【讨论】:

James,正如我所指出的,该页面确实说它可以在 IE9 中运行。你让它适用于 IE developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… indexOf 在所有主流浏览器中都可用,除了 IE 'foo' in arr 呢? @SuperUberDuper: 检查对象键是否存在:1 in ['a'] -&gt; false 1 in ['a', 'b'] -&gt; true 'length' in [] -&gt; true 在 JS 中,数组本质上是一个带有数字键的对象。 needsmorejquery.com【参考方案2】:

jQuery 提供$.inArray:

注意 inArray 返回找到的元素的索引,所以0 表示该元素是数组中的第一个元素。 -1 表示未找到该元素。

var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];

var foundPresent = $.inArray('specialword', categoriesPresent) > -1;
var foundNotPresent = $.inArray('specialword', categoriesNotPresent) > -1;

console.log(foundPresent, foundNotPresent); // true false
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

3.5 年后编辑

$.inArray 在支持它的浏览器中实际上是Array.prototype.indexOf 的包装器(现在几乎所有浏览器),同时在那些不支持它的浏览器中提供一个填充程序。它本质上等同于在Array.prototype 中添加一个 shim,这是一种更惯用/JSish 的做事方式。 MDN 提供such code。这些天我会选择这个选项,而不是使用 jQuery 包装器。

var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];

var foundPresent = categoriesPresent.indexOf('specialword') > -1;
var foundNotPresent = categoriesNotPresent.indexOf('specialword') > -1;

console.log(foundPresent, foundNotPresent); // true false

3 年后再编辑

天哪,6.5 年?!

现代 Javascript 中最好的选择是 Array.prototype.includes:

var found = categories.includes('specialword');

没有比较,也没有混淆 -1 结果。它做我们想做的事:它返回truefalse。对于旧版浏览器,它是 polyfillable using the code at MDN。

var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];

var foundPresent = categoriesPresent.includes('specialword');
var foundNotPresent = categoriesNotPresent.includes('specialword');

console.log(foundPresent, foundNotPresent); // true false

【讨论】:

【参考方案3】:

给你:

$.inArray('specialword', arr)

此函数返回一个正整数(给定值的数组索引),如果在数组中未找到给定值,则返回-1

现场演示: http://jsfiddle.net/simevidas/5Gdfc/

你可能想这样使用它:

if ( $.inArray('specialword', arr) > -1 ) 
    // the value is in the array

【讨论】:

【参考方案4】:

您可以使用for 循环:

var found = false;
for (var i = 0; i < categories.length && !found; i++) 
  if (categories[i] === "specialword") 
    found = true;
    break;
  

【讨论】:

我可能完全错了,但你不想在 for 循环中声明 i 吗?如果你不把“var”放在前面,它会把它放在全局上下文中(我认为......),这可能不是你想要的。 虽然这是真的,但这并不是他在这里所说的重点。不要为了几棵树而忽视森林。 @ChrisJones 鉴于 JS 业余爱好者会将这个答案复制并粘贴到他们的代码中,它应该越好【参考方案5】:

我不喜欢$.inArray(..),这是一种丑陋的、jQuery 风格的解决方案,大多数理智的人都不会容忍。这是一个 sn-p,它为您的武器库添加了一个简单的 contains(str) 方法:

$.fn.contains = function (target) 
  var result = null;
  $(this).each(function (index, item) 
    if (item === target) 
      result = item;
    
  );
  return result ? result : false;

同样,您可以将$.inArray 包装在扩展中:

$.fn.contains = function (target) 
  return ($.inArray(target, this) > -1);

【讨论】:

(我不是反对者)我不确定在总结一个依赖于 $(selector).each() 的方法时我是否理解对 $.inArray 的嘲笑。实际的 inArray 代码只是将 indexOf 用于本机支持它的浏览器,或者在不支持时使用像 Jared 的答案这样的 for 循环。对我来说似乎非常优雅。【参考方案6】:

我们可以使用includes选项(js内置函数),如果为true则返回true,如果找到值则为false。

如果你想要精确的索引,你可以使用 indexOf (这也是 js 内置函数),如果找到值,它将返回精确的索引,否则它将返回 -1。

您可以使用返回布尔值的 .some 方法切换 .includes。 一旦找到匹配项,它将立即退出,这对于大型数组的性能非常有用:

注意:都区分大小写

var myarr = ["I", "like", "turtles"];

isVal = myarr.includes('like')
index = myarr.indexOf('like')
some = myarr.some(item => item.toLowerCase() == 'like'.toLowerCase())


console.log(isVal)
console.log(index)
console.log(some)

请检查一下。

【讨论】:

虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。【参考方案7】:

使用现代 javascript 的 Array 方法:

Array.prototype.includes() // 在 ES7 中引入:

返回布尔值

const data = 
  categories: [
    "specialword",
    "word1",
    "word2"
  ]


console.log("Array.prototype.includes()")
// Array.prototype.includes()
// returns boolean
console.log(data.categories.includes("specialword"))
console.log(data.categories.includes("non-exist"))
.as-console-wrapper  max-height: 100% !important; top: 0; 

Array.prototype.find() // 在 ES6 中引入:

返回找到的元素或未定义的元素

const data = 
  categories: [
    "specialword",
    "word1",
    "word2"
  ]


console.log("Array.prototype.find()")
// Array.prototype.find()
// returns the element if found
// returns undefined if not found
console.log(data.categories.find(el => el === "specialword") != undefined)
console.log(data.categories.find(el => el === "non-exist") != undefined)
.as-console-wrapper  max-height: 100% !important; top: 0; 

【讨论】:

以上是关于QT 如何在文件中查找是不是有该字符或字符串?的主要内容,如果未能解决你的问题,请参考以下文章

java - 如何查找包含特殊字符或空格的url是不是存在于java中

如何在字符串数组中过滤或查找字符串

如何创建正则表达式来查找 JS 文件(或 JSON)中的所有字符串

Centos 查找目录下所有文件中是不是包含指定字符串

SQL查询如何判断要查找的字符是不是在一个指定集合中

批处理文件:查找子字符串是不是在字符串中(不在文件中)