Autohotkey 改变变量的特定字符?

Autohotkey 改变变量的特定字符?,autohotkey,Autohotkey,是否可以在自动热键中以变量中的特定字符为目标?在本例中,我希望将变量中的第一个字符大写/小写 ::foo:: InputBox, foo, Foo, Enter foo: /* Capitalize first character of %foo% here. Do whatever. */ return 在您的情况下,您可以: T代表: 字符串将转换为标题大小写。例如,“乱世佳人”将变成“乱世佳人”。" 除此之外,您始终可以使用或来确定子字符串,然后更改它们并附加它们: firstLette

是否可以在自动热键中以变量中的特定字符为目标?在本例中,我希望将变量中的第一个字符大写/小写

::foo::
InputBox, foo, Foo, Enter foo:
/*
Capitalize first character of %foo% here.
Do whatever.
*/
return
在您的情况下,您可以:

T
代表:

字符串将转换为标题大小写。例如,“乱世佳人”将变成“乱世佳人”。"

除此之外,您始终可以使用或来确定子字符串,然后更改它们并附加它们:

firstLetter     := subStr(foo, 1, 1)
stringUpper, firstLetter, firstLetter
remainingLetters := subStr(foo, 2, strLen(foo))
foo := firstLetter . remainingLetters
; or, equally:
; foo = %firstLetter%%remainingLetters%
在您的情况下,您可以:

T
代表:

字符串将转换为标题大小写。例如,“乱世佳人”将变成“乱世佳人”

除此之外,您始终可以使用或来确定子字符串,然后更改它们并附加它们:

firstLetter     := subStr(foo, 1, 1)
stringUpper, firstLetter, firstLetter
remainingLetters := subStr(foo, 2, strLen(foo))
foo := firstLetter . remainingLetters
; or, equally:
; foo = %firstLetter%%remainingLetters%

@Blauhirn解决方案的备选方案一:

MsgBox % foo := Format("{:U}",  SubStr(foo, 1,1)) . subStr(foo, 2, strLen(foo))
这也可以在RegEx中非常简单地完成

已编辑的:

这里有一个完整的例子,它的使用与连接删除

fu := "fu"
bar := "beyond all recognition!"
MsgBox % capitalize(fu) A_space capitalize(bar)
Return 

capitalize(x) {
return Format("{:U}",  SubStr(x, 1,1)) subStr(x, 2, strLen(x))
}
正则表达式:

;This is the only example that accounts for Whitespace
var := "   regex is cool!"             
MsgBox % RegExReplace(var, "^(\s*)(.)", "$1$u2")
NumPut/DllCall:

var := "autohotkey is awesome!"
NumPut(Asc(DllCall("CharUpperA", Str,Chr(NumGet( var,0,"UChar")),Str)), var,0,"UChar")
MsgBox % var

@Blauhirn解决方案的备选方案一:

MsgBox % foo := Format("{:U}",  SubStr(foo, 1,1)) . subStr(foo, 2, strLen(foo))
这也可以在RegEx中非常简单地完成

已编辑的:

这里有一个完整的例子,它的使用与连接删除

fu := "fu"
bar := "beyond all recognition!"
MsgBox % capitalize(fu) A_space capitalize(bar)
Return 

capitalize(x) {
return Format("{:U}",  SubStr(x, 1,1)) subStr(x, 2, strLen(x))
}
正则表达式:

;This is the only example that accounts for Whitespace
var := "   regex is cool!"             
MsgBox % RegExReplace(var, "^(\s*)(.)", "$1$u2")
NumPut/DllCall:

var := "autohotkey is awesome!"
NumPut(Asc(DllCall("CharUpperA", Str,Chr(NumGet( var,0,"UChar")),Str)), var,0,"UChar")
MsgBox % var

我可能在这里误解了一些东西,但是构建子字符串之后直接将它们连接起来又有什么用呢?我很困惑您是否感到困惑?它与您在示例中发布的概念完全相同,只是在没有解释性赋值的情况下缩短了。很好地捕捉到了这个连接,我刚刚检查了它,它没有必要正确地返回Foo(尽管当它被删除时仍然会发生这种情况)。我想我本可以像你那样补充更多的说明,我只是觉得没有必要,因为你的回答已经足够彻底了。我可能在这里误解了一些东西,但是构建子字符串之后直接将它们连接起来有什么用呢?我很困惑你是否感到困惑?它与您在示例中发布的概念完全相同,只是在没有解释性赋值的情况下缩短了。很好地捕捉到了这个连接,我刚刚检查了它,它没有必要正确地返回Foo(尽管当它被删除时仍然会发生这种情况)。我想我本可以像你那样补充一些澄清,我只是觉得没有必要,因为你的回答非常彻底。你从来没有接受过一个答案,而且给出了多个例子。你能这样做吗?你从来没有接受过答案,而且有多个例子。你能这样做吗?