说明| 一种Java程序,用于读取文本文件并按字母顺序打印每个唯一单词以及单词在文本中出现的次数.
程序应该声明一个类型的变量Map<String, Integer>来存储单词和相应的出现频率.但是哪种具体类型呢?TreeMap<String, Number>还是HashMap<String, Number>?
输入应转换为小写.
一个单词不包含以下任何字符: \t\t\n]f.,!?:;\"()'
示例输出|
Word Frequency
a 1
and 5
appearances 1
as 1
.
.
.
Run Code Online (Sandbox Code Playgroud)
备注| 我知道,我已经在Perl中看到了大致两行代码的优雅解决方案.但是,我想在Java中看到它.
编辑:哦,是的,使用这些结构之一显示实现是有帮助的(在Java中).
我不知道需要多线程,工作为主,或异步,但基本上我有一个PowerShell脚本函数,它的几个参数是否调用这个,我需要使用不同的参数调用了几次,有这些运行在平行下.
目前,我调用这样的函数:
Execute "param1" "param2" "param3" "param4"
Run Code Online (Sandbox Code Playgroud)
如何在不等待每次调用Execute返回调用者的情况下多次调用它?
目前我正在运行v2.0,但如有必要,我可以更新
编辑:这是我到目前为止,这是行不通的:
$cmd = {
param($vmxFilePath,$machineName,$username,$password,$scriptTpath,$scriptFile,$uacDismissScript,$snapshotName)
Execute $vmxFilePath $machineName $username $password $scriptTpath $scriptFile $uacDismissScript $snapshotName
}
Start-Job -ScriptBlock $cmd -ArgumentList $vmxFilePath, $machineName, $username $password, $scriptTpath, $scriptFile, $uacDismissScript, $snapshotName
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
无法将'system.object []'转换为参数'initializationscript'所需的'system.management.automation.scriptblock'类型.不支持指定的方法
编辑2:我修改了我的脚本,但我仍然得到上面提到的错误.这是我的mod:
$cmd = {
param($vmxFilePath,$machineName,$username,$password,$scriptTpath,$scriptFile,$uacDismissScript,$snapshotName)
Execute $vmxFilePath $machineName $username $password $scriptTpath $scriptFile $uacDismissScript $snapshotName
}
Start-Job -ScriptBlock $cmd -ArgumentList $vmxFilePath, $machineName, $username $password, $scriptTpath, $scriptFile, $uacDismissScript, $snapshotName
Run Code Online (Sandbox Code Playgroud) 我试图通过添加以下内容来设置我的csproj文件以在父目录中搜索依赖项:
<PropertyGroup>
<AssemblySearchPaths>
..\Dependencies\VS2012TestAssemblies\; $(AssemblySearchPaths)
</AssemblySearchPaths>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
我将它添加为第一个具有所有Reference声明的ItemGroup之前的最后一个PropertyGroup元素.
不幸的是,这导致所有其他引用无法解析,例如:
ResolveAssemblyReferences:
Primary reference "Microsoft.CSharp".
9>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(1578,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "Microsoft.CSharp". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.
For SearchPath "..\Dependencies\VS2012TestAssemblies\".
Considered "..\Dependencies\VS2012TestAssemblies\Microsoft.CSharp.winmd", but it didn't exist.
Considered "..\Dependencies\VS2012TestAssemblies\Microsoft.CSharp.dll", but it didn't exist.
Considered "..\Dependencies\VS2012TestAssemblies\Microsoft.CSharp.exe", but it didn't exist.
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法让我告诉msbuild在哪里搜索我的项目的依赖项?我意识到我可以使用/ p:ReferencePath,但是我更喜欢在csproj文件本身中使用编译逻辑而不是让TFS Team Builds指示在哪里查看,更不用说我希望能够在其他地方编译开发者机器.
我确实尝试将$(AssemblySearchPaths)移到列表中的第一位,但这没有帮助.
.Net安全noob在这里...防止其他人加载我的程序集的最简单方法是什么?
背景:虽然我真的在寻找'足够好'的保护(有足够的时间/金钱/智能,有人可以成功破解,破解和攻击),这似乎应该已经解决了问题,我只是想念它.
这是我(我想)我知道的:
虽然强大的命名可以用作安全层,但根据这个微软文档,它并不一定是有意的(参见警告:不要依赖强名称来保证安全性.它们只提供唯一的身份.)
在那个^注意我遇到了我无法加载第三方组件的情况(Aspose我认为它是)因为他们没有签署他们的集会,但是我的全部都是.所以我不得不ildasm他们的集会,用我们自己的snk签名,然后ilasm回来),以便使用他们的库.因此,强大的命名对我来说似乎不是一个好的安全机制. 但是 ......在代码中进行简单检查以验证调用程序集是否使用我的公钥令牌?这有效吗?
如果强大的命名不应该用于我想要完成的任务,那么在dll上实现Authenticode数字签名检查路径越好(看起来wintrust.dll可以帮助解决这个问题)?
我一直在经历几个供应商的混淆工具,很多都带有许可和各种东西.我可能会使用一些混淆来隐藏一些敏感部分,但是我仍然希望有一种机制来阻止某人加载我的敏感库,而不必使用字符串和代码加密等功能,这通常会带来性能(和其他)成本.
回到这个问题,阻止某人加载我的程序集的最简单方法是什么?
使用 GroovyConsole 我有文件 main.groovy :
new Helpers().test("test method called")
Run Code Online (Sandbox Code Playgroud)
并在同一目录中有包含内容的文件 Helpers.groovy
def test(String str) {
println "test method called with: " + str
}
Run Code Online (Sandbox Code Playgroud)
运行结果中的结果:
groovy> new Helpers().test("test method called")
test method called with: test method called
Run Code Online (Sandbox Code Playgroud)
然而,在 Jenkins 使用 DSL 的上下文中,我在文件生成器.groovy 中有类似的代码:
new Helpers().test("test method called")
Run Code Online (Sandbox Code Playgroud)
然后在同一目录的 Helpers.groovy 中我有:
def test(String str) {
println("test method called on: " + str)
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行时,我在日志中没有得到任何输出(来自 println)。如果我将 def 放在同一个 main.groovy 文件中,则它可以正常工作。
可能缺少一些基本的东西。它正在詹金斯中编译/绿色,所以不确定如何适应这一点,因此运行时将执行我想要的操作。
我正在使用Joomla!CMS开发一个网站.在不久的将来,我定制了一个模板来建立一个网站.将代码拆分为de-joomla很有趣也很有趣! - 模板.事实上,我很有趣,我正在调整从头开始制作自己的模板的想法.
所以,如果我要追求这个,我从哪里开始呢?您是否知道任何非常好的参考资料,或者我应该整天玩这些代码直到事情成功?在我去之前,我更喜欢做大量的阅读(对于概念).
我有一个脚本找到特定安装的软件,但我也无法获得该软件的版本.例如,假设我收到了所有安装的Microsoft软件的列表.这是我到目前为止:
echo software installed > software_list.txt
echo ================= >>software_list.txt
reg export HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall temp1.txt
find "Microsoft" temp1.txt| find "DisplayName" > temp2.txt
for /f "tokens=2,3 delims==" %%a in (temp2.txt) do (echo %%a >> software_list.txt)
start notepad "software_list.txt"
del temp1.txt temp2.txt
Run Code Online (Sandbox Code Playgroud)
如何从reg导出中获取DisplayVersion?如果我用DisplayVersion替换DisplayName,甚至找不到任何东西.或者,我应该在这里采取另一种途径吗?
在我试图解析一些C#时,我恐怕我不理解这段代码的目标或逻辑:
if (!string.IsNullOrEmpty(str2) && (Strings.UCase(Strings.Left(str2, 1)) != Strings.Left(str2, 1)))
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
我理解第一部分是检查str2是否"非空",但是第二部分有点不稳定.所以我们将str2的第一个字符用于UCase,如果它不等于str2的第一个字符(不是"UCase"d),那么返回"false"?
也许我没有遗漏任何东西,我上面描述的实际上是代码正在做什么.如果是这种情况,我们可以将其改为提供相同结果的其他内容,例如,检查str2是否为大写?我觉得这是最终目标.
你的想法?
如果用户输入单词"look"的形式,例如"look"或"looking",我如何将其识别为动词外观的修改版本?我想其他人已经遇到并解决了这个问题之前......
我需要使用Patch Design和Installshield 2012创建一系列可卸载的补丁.前两个补丁在卸载时工作正常.但是,第三个补丁,当且仅当已经应用补丁1和/或补丁2时才会卸载,会产生错误:
MSI (c) (48:C4) [19:02:54:135]: Font created. Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg
Error 1308.Source file not found: {pathToFile}. Verify that the file exists and that you can access it.
Run Code Online (Sandbox Code Playgroud)
关于不同的文件有26个这样的错误.文件或组件或功能没有明显的模式
注意:如果我只应用了补丁3,卸载不会产生此错误.
我在Patch Design中使用相同的选项创建了所有三个补丁.我理解的唯一明显的区别是补丁3包含比前两个更多的更改(文件更新).让我再说一遍:更多的变化.
我的问题是:
为什么只在安装了一系列补丁的情况下才会发生这种情况,而不仅仅是第三个补丁本身?
为了防止修补程序卸载尝试从构建修补程序时仅用于设计时的位置获取文件,我该怎么办?或者这可能是设计中的提取,但缓存太过重载或混淆..?
更新 - 更多信息(由Glytzhkof请求):补丁包含96个文件更改,大约是基本MSI包大小的一半.它实际上是在'Dev'分支工作之外.添加了几个新文件.有些人最初被删除了(当我发现我们真的在做补丁时,不得不把它们放回去......).如果我不再描述这种情况,它可能会冒犯你作为该领域的专业人士.
我一直在尝试销售大型升级,只需要对安装程序进行一些调整就可以使其过时需要补丁.卸载我们的产品需要参数,以便它是非交互式的(我们需要此参数在Major Upgrade场景中工作,它目前只是卸载序列的一部分).这是唯一真正的问题 - 但修复它会支付成本.然而,决定不解决这个问题.我尝试在每次迭代时"碰撞"这个问题.没有骰子.我告诉我们需要主要版本的补丁 - 所以在这里我试图让尾巴摇尾巴.
是的,补丁可以更快(让我在这里扮演魔鬼的拥护者).但实际上,30到90秒之间的差异,当这些东西自动部署时?是的,我还考虑通过调整文件成本来找到优化安装程序的方法,看看它是否能让它变得更快,但即使这样,我也确定会有另一个原因要求修补程序.
另一个更新:1308错误中提到的文件不在目标系统上 %windir%Installer\$PatchCache$\Managed\{PackedProductCodeOfMyBaseMSI??}
夹.这可能会导致1308,因为如果我从此缓存中删除更多文件,我会得到与丢失文件相对应的相同错误.问题可能是,为什么不是这个PatchCache文件夹中的所有文件?
我试图弄清楚如何找到不是年份的数字(我将一年定义为一个四位数的数字.)
例如,我想接
1
12
123
Run Code Online (Sandbox Code Playgroud)
但不是
1234为了避免日期(4位数).
如果正则表达式也接受了12345这很好,但不是解决这个问题所必需的
(注意:这些要求可能看起来很奇怪.它们是我遇到的更大解决方案的一部分)
单步执行此操作并注意'folder'将为null.我可以使用/添加核心库中的某些内容以确保我可以"获取"C:\作为目录,以便稍后我可以将它与另一个目录组合吗?这很重要,因为它"C:\"是我试图满足的要求的有效数据
使用System.IO;
string folder = @"C:\";
folder = Path.GetDirectoryName(folder);
string folder2 = Path.Combine(folder, "IWantToCombineThisFolderButIGetException");
Run Code Online (Sandbox Code Playgroud) c# ×2
.net ×1
algorithm ×1
asynchronous ×1
batch-file ×1
conditional ×1
groovy ×1
hashmap ×1
java ×1
jenkins ×1
joomla ×1
map ×1
modifier ×1
msbuild ×1
msi-patch ×1
obfuscation ×1
patch ×1
powershell ×1
regex ×1
string ×1
strongname ×1
templates ×1
treemap ×1