假设我有一个文本流(或Java中的Reader),我想检查一个特定的字符串.文本流可能非常大,因此一旦找到搜索字符串,我就想返回true并且还试图避免将整个输入存储在内存中.
天真地,我可能会尝试做这样的事情(在Java中):
public boolean streamContainsString(Reader reader, String searchString) throws IOException {
char[] buffer = new char[1024];
int numCharsRead;
while((numCharsRead = reader.read(buffer)) > 0) {
if ((new String(buffer, 0, numCharsRead)).indexOf(searchString) >= 0)
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
当然,如果它出现在1k缓冲区的边界上,则无法检测到给定的搜索字符串:
搜索文本:"stackoverflow"
流缓冲区1:"abc ......... stack"
流缓冲区2:"溢出....... xyz"
如何修改此代码,以便正确地找到跨越缓冲区边界的给定搜索字符串,但不将整个流加载到内存中?
编辑:注意在搜索字符串的流时,我们尝试最小化从流中读取的数量(以避免网络/磁盘中的延迟)并保持内存使用不变,无论流中的数据量如何.字符串匹配算法的实际效率是次要的,但很明显,找到使用这些算法中更有效的算法之一的解决方案会很好.
计算给定字符串出现次数的最佳方法是什么,包括python中的重叠?这是最明显的方式:
def function(string, str_to_search_for):
count = 0
for x in xrange(len(string) - len(str_to_search_for) + 1):
if string[x:x+len(str_to_search_for)] == str_to_search_for:
count += 1
return count
function('1011101111','11')
returns 5
Run Code Online (Sandbox Code Playgroud)
?
或者在python中有更好的方法吗?
我刚刚开始使用 Visual Studio 2022,我尝试通过 ctrl+F 和“查找全部”功能搜索某些内容,但它没有找到我正在搜索的密钥,即使我知道有这样一个在解决方案中我的一个项目中键入一个文件。全新安装后我是否会错过配置步骤?
注意:当我在“当前文档”中搜索时,我能够找到密钥
当您进行搜索时,Google Chrome中有一项很棒的功能.它会告诉您正在搜索的关键字的匹配数.但是,在Vim我没有看到这样的功能.有人建议使用%s/pattern//gn或类似:
http://vim.wikia.com/wiki/Count_number_of_matches_of_a_pattern
无法计算Vim中的匹配数
但这真的很长!! 当我按'*','%'或使用'/'和'?'进行搜索时,我正在寻找计数.
任何的想法?
是否有办法在项目视图中始终忽略文件夹...
我在一个仓库中有多个应用程序,每个应用程序都有"node_modules"
mainapp
---microapp
-----node_modules
---microapp2
-----node_modules
---index
---config
---assets
Run Code Online (Sandbox Code Playgroud)
node_modules当我在上面的结构中搜索项目时,我想从搜索文件夹中排除.
有没有办法在Visual Studio 2005/8中进行搜索时排除特定类型的.cs文件?
示例:在重构场景中,我可能会搜索以识别我的代码中的字符串文字,以便我可以将它们重构为常量或类似的.但是,*designer.cs文件中充满了字符串文字,我无需处理它们,但它们出现在我的搜索中并污染了结果集.
我经常搜索*.cs ...
我如何忽略*.designer.cs?
我们看到谷歌,Firefox,一些AJAX页面显示可能的项目列表,而用户键入字符.
有人能给出一个好的算法,数据结构来实现自动完成吗?
如何更改操作栏搜索视图提示文本颜色?
这个问题解释了如何在使用ABS时获取EditText: Android ActionBar自定义搜索视图
有没有android.R.id我可以用来获取EditText的引用,所以我可以改变提示颜色?或者还有其他方法可以改变颜色吗?

在Python中,如何检查字符串是否只包含某些字符?
我需要检查一个只包含a..z,0..9和的字符串.(期间),没有其他性格.
我可以迭代每个字符并检查字符是a ..z或0..9,或.但那会很慢.
我现在还不清楚如何使用正则表达式来完成它.
它是否正确?你能建议一个更简单的正则表达式或更有效的方法吗?
#Valid chars . a-z 0-9
def check(test_str):
import re
#http://docs.python.org/library/re.html
#re.search returns None if no position in the string matches the pattern
#pattern to search for any character other then . a-z 0-9
pattern = r'[^\.a-z0-9]'
if re.search(pattern, test_str):
#Character other then . a-z 0-9 was found
print 'Invalid : %r' % (test_str,)
else:
#No character other then . a-z 0-9 was found
print 'Valid : %r' % (test_str,)
check(test_str='abcde.1')
check(test_str='abcde.1#')
check(test_str='ABCDE.12')
check(test_str='_-/>"!@#12345abcde<')
''' …Run Code Online (Sandbox Code Playgroud) 我有2个数组,值将从数据库加载,下面是一个例子:
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
Run Code Online (Sandbox Code Playgroud)
我想要做的是检查是否所有的值中$arr1的存在$arr2.上面的例子应该是一段TRUE时间:
$arr3 = array(1,2,4,5,6,7);
Run Code Online (Sandbox Code Playgroud)
比较$arr1有$arr3将返回FALSE.
通常我使用in_array因为我只需要将单个值检查到数组中.但在这种情况下,in_array不能使用.我想看看是否有一种简单的方法来进行最小循环检查.
更新澄清.
第一个数组将是一个包含唯一值的集合.第二个数组可以包含重复的值.它们在处理之前都保证有阵列.
search ×10
algorithm ×2
python ×2
string ×2
android ×1
arrays ×1
autocomplete ×1
c ×1
c++ ×1
character ×1
compare ×1
editor ×1
java ×1
php ×1
regex ×1
stream ×1
sublimetext ×1
sublimetext3 ×1
text-editor ×1
vim ×1