如何解决将数字转换为时间戳在特定位置插入冒号
我为此使用 AutoHotkey,因为代码对我来说是最容易理解的。所以我有一个带有数字和文本的文档,例如这样
并且所需的输出是
我确定 StrReplace 可用于插入冒号,但我不确定如何指定冒号的位置或要求 AHK '查找' 6 位数字的特定字符串。之前,我会突出显示我想要应用 StrReplace 的文本,然后按一个热键,但我想知道是否有一种不需要我交互的更有效的方法来做到这一点。即使只是指出我需要研究的相关功能也会有所帮助!非常感谢,我对编程还是很陌生。
解决方法
hfontanez 的回答对弄清楚这个问题非常有帮助,我不得不使用循环和子字符串函数。我确信编写此代码的方法要少得多,但这是适合我的目的的最终版本:
Loop,read,C:\[location of input file]
{
{ If A_LoopReadLine = ;
Continue ; this part is to ignore the blank lines in the file
}
{
one := A_LoopReadLine
x := SubStr(one,1,2)
y := SubStr(one,3,2)
z := SubStr(one,5)
two := x . ":" . y . ":" . z
FileAppend,%two%`r`n,C:\[location of output file]
}
}
return
,
假设“时间戳”组件的长度始终为 6 个字符并且始终位于字符串的开头,则此解决方案应该可以正常工作。
String test = "012345 test test test";
test = test.substring(0,2) + ":" + test.substring(2,4) + ":" + test.substring(4,test.length());
这输出 01:23:45 test test test
为什么?因为您正在临时创建一个 String
对象,它的长度为两个字符,然后在获取下一个字符之前插入冒号。最后,您附加 String
的其余部分并将其分配给您想要的任何 String
变量。请记住,substring
方法不会修改您正在调用该方法的 String
对象。此方法返回一个“新”String
对象。因此,变量 test
不会被修改,直到赋值操作结束。
或者,您可以使用 StringBuilder
并像这样附加每个组件:
StringBuilder sbuff = new StringBuilder();
sbuff.append(test.substring(0,2));
sbuff.append(":");
sbuff.append(test.substring(2,4));
sbuff.append(":");
sbuff.append(test.substring(4,test.length()));
test = sbuff.toString();
您也可以使用“花式”循环来执行此操作,但我认为对于如此简单的事情,循环只是矫枉过正。哦,我差点忘了,这应该适用于你的两个测试字符串,因为在最后一个冒号插入之后,代码不加选择地将子字符串从索引位置 4 一直到字符串的末尾。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。