我有一个关键字列表,我希望能够找到一个字符串是否包含任何这些关键字.现在我的解决方案需要O(n).有没有更快的方式进行此搜索而不循环每个关键字并进行比较/包含?
ie Keywords ="cat","hat","mat","bat","fat","sat","rat","pat","foo bar","foo-bar"String ="有盒子里的一只猫." 结果是这样的,因为"cat"匹配'keywords'中的一个单词
编辑:当我说O(n)时,我想我不太清楚.我的意思是说O(n)其中n =关键字的数量.
我正在尝试使用 Java 将文本文件输出到控制台。我想知道这样做的最有效方法是什么?
然而,我研究了几种方法,很难辨别哪个是对性能影响最小的解决方案。
将文本文件输出到控制台将涉及读取文件中的每一行,然后将其写入控制台。
是否更好地使用:
带有 FileReader 的缓冲 Reader,按行读取并执行一堆 system.out.println 调用?
BufferedReader in = new BufferedReader(new FileReader("C:\\logs\\"));
while (in.readLine() != null) {
System.out.println(blah blah blah);
}
in.close();
Run Code Online (Sandbox Code Playgroud)扫描仪读取文件中的每一行并执行 system.print 调用?
while (scanner.hasNextLine()) {
System.out.println(blah blah blah);
}
Run Code Online (Sandbox Code Playgroud)谢谢。
我有一个类,我正在尝试序列化shared_ptr但序列化对象的常规方法不起作用:
class Object {
public:
Object();
~Object();
shared_ptr<char>objectone;
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & objectone;
}
};
Run Code Online (Sandbox Code Playgroud)
我甚至以这种方式尝试过但它仍然无效:
void serialize(Archive &ar, const unsigned int version)
{
for (int i = 0; i < (strlen(objectone.get())); i++)
ar & objectone.get()[i];
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何处理这个?谢谢.
一些额外的信息:
我已经包含了两个shared_ptr头文件:
#include <boost/serialization/shared_ptr.hpp>
#include <boost/serialization/shared_ptr_132.hpp>
Run Code Online (Sandbox Code Playgroud)
我试图转换为字符串并以这种方式序列化它但它产生以下错误:boost :: archive :: archive_exception'what():stream error
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive &ar, const unsigned int version)
{
if (objectone.get()) {
string …Run Code Online (Sandbox Code Playgroud) 我在jar中的属性文件中有一个设置,我希望在构建时使用ant来改变它.理想情况下,如果我能够在属性文件中搜索特定文本并轻松替换它,我想这样做但不确定如何.
所以我想我可以用另一个已经预定义新设置的属性文件覆盖它.jar已存在于我的目录中,jar的层次结构如下:
food.jar
/com/food/donut.properties
some file...
some file...
Run Code Online (Sandbox Code Playgroud)
如果我有另一个donut.properties文件,其中不同的设置位于不同的目录中.我怎么能用蚂蚁覆盖它呢?
感谢您的帮助,非常感谢!
编辑:
使用以下代码,我可以将属性文件复制到jar中.但每当我尝试将新属性文件复制到旧属性文件的同一目录中时,它都不会被替换.(即如果我将前缀更改为'com',我可以看到新的属性文件被插入到jar中.如果前缀更改为com/food,则不会替换任何内容.我做错了什么?
Run Code Online (Sandbox Code Playgroud)<jar destfile="${dist.dir}/food.jar" update="true"> <zipfileset file="donut.xml" prefix="com/food/" /> </jar>
我想启用休眠查询缓存。我了解 'Query' 和 'Criteria' 有一个名为 'setCachable' 的函数,以便将查询标记为可缓存。有没有办法用'CriteriaQuery'来做到这一点?
CriteriaQuery<UserEntity> criteria = entityManager.getCriteriaBuilder().createQuery(UserEntity.class);
Root <UserEntity> contactRoot = criteria.from(UserEntity.class);
criteria.select(contactRoot);
Predicate predicate = entityManager.getCriteriaBuilder().equal(
contactRoot.get("username"), username);
criteria.where(predicate);
UserEntity contact = entityManager.createQuery(criteria).getSingleResult();
return contact;
Run Code Online (Sandbox Code Playgroud) 我当前有一个包含以下内容的文件:
<refrigerator>
<food="watermelon" location="topShelf" />
<!--
<food="mango" location="bottomShelf" />
-->
<!--
<food="orange" location="middleShelf" />
-->
</refrigerator>
Run Code Online (Sandbox Code Playgroud)
我如何使用“sed”来删除<!--和-->取消注释“mango”?但是,如果文件中还有其他行被注释,我希望它们保持注释状态吗?
谢谢!
我正在尝试替换属性文件中的一行文本.例如:
food.type=banana
Run Code Online (Sandbox Code Playgroud)
使用这行代码,我可以完全用另一个输入的输入替换banana.
FOOD=apple
sed "s/food.type=.*/food.type=$FOOD/"
Run Code Online (Sandbox Code Playgroud)
输出:
food.type=apple
Run Code Online (Sandbox Code Playgroud)
然而,当我试图替换的前一行文本中有一个/,我无法让替换工作.例如:
food.type=/yellow/banana
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢.谢谢!
我试图在文件中搜索文本并将其存储到变量中.
我的文件看起来像这样:
Type: Furniture
Color: Blue
Version: 1
Run Code Online (Sandbox Code Playgroud)
我正在尝试搜索版本号并将其存储到变量中并递增它.我在搜索文件时不知道这个号码.到目前为止,我有类似的东西.
VERSIONNUMBER=//Somehow I want to get the version # from the file.
VERSIONNUMBER=`expr $VERSIONNUMBER + 1'
sed -i "s/Version:.*/Version=$VERSIONNUMBER/" filename
Run Code Online (Sandbox Code Playgroud)
到目前为止我是在正确的轨道上还是有更好的方法吗?我在搜索版本号时遇到问题.我一直在收到语法错误.任何帮助深表感谢.
VERSIONNUMBER=`sed -i "s/Version:/*" filename`
Run Code Online (Sandbox Code Playgroud) 我正在使用 httpclient 4.5.3 和 Fluent API ( http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fluent.html )。从 4.2.x 升级到 httpclient 4.5.3 后,响应中的“Content-Encoding”标头似乎从响应标头中删除,我不知道如何支持 gzip 压缩。
我正在向https://www.yahoo.com发出 GET 请求,并发送标头“Accept-Encoding”:“gzip”
我的 4.5.3 响应标头现在显示以下内容,但没有 Content-Encoding 标头:
Date: Thu, 01 Jun 2017 21:21:55 GMT
Strict-Transport-Security: max-age=2592000
X-Frame-Options: DENY
Set-Cookie: autorf=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; domain=www.yahoo.com
Vary: Accept-Encoding
Content-Type: text/html; charset=UTF-8
Age: 0
Transfer-Encoding: chunked
Connection: keep-alive
Via: http/1.1 ir11.fp.ne1.yahoo.com (ApacheTrafficServer)
Server: ATS
Cache-Control: no-store, no-cache, private, max-age=0
Expires: -1
Run Code Online (Sandbox Code Playgroud)
我的响应处理程序有以下代码。但是,entity.getContentEncoding() 始终为 null。
HttpEntity entity = response.getEntity();
Header header = entity.getContentEncoding(); …Run Code Online (Sandbox Code Playgroud) 如果我想在文件中搜索一行并在该行的末尾添加一个字符串,我该怎么办呢?IE:
file=?
Run Code Online (Sandbox Code Playgroud)
我想file=?用文件路径搜索并替换问号.文件路径位于变量中$FILEPATH
file=$FILEPATH
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑
sed -i -f "s,file=\?,file=$FILEPATH,g"
Run Code Online (Sandbox Code Playgroud)
上面的效果很好,是我正在寻找的,但有没有办法取代问号?如果我有以下代码:
FILEPATH=/file/path
Run Code Online (Sandbox Code Playgroud)
属性文件:
something=?
file=?
Run Code Online (Sandbox Code Playgroud)
替换产生:
属性文件:
something=?
file=/file/path?
Run Code Online (Sandbox Code Playgroud)
有没有办法?完全取代?