我从VSO(使用TFPT.exe)获取一个字符串,该字符串可以是项目编号或项目编号加上字母
“830”或“830a”
如果信件存在,我该如何中断 - 并将数字转换为int
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = PatchedSpringockitoContextLoader.class, locations = {
"classpath:/config.xml"
})
...
@Autowired
@WrapWithSpy
private MyService myService;
...
@Before
public void setup() {
initMocks(this);
...
}
...
@Test
public void test() {
// run the process that may or may not call the service
verify(myService, never()).myMethod(any(MyParam.class));
}
我试图测试“830”是否是一个数字 - 但我想因为它将其作为一个字符串拉入,我不知道该怎么问:这个字符串可以是一个int吗?
答案 0 :(得分:3)
假设只有一组数字,-match
可以很容易地使用正则表达式。其中\ d +将匹配一组连续数字。
PS C:\temp> "830a" -match "\d+"
True
PS C:\temp> $matches[0]
830
知道你可以在你的代码中加入这样的东西。
$b = If($a -match "\d+"){[int]$matches[0]}
显然,使用更好的变量名更合适,但这只是概念的证明。如果字母字符位于字符串的中间,那么写入会导致问题。只要数字组合在一起,它将以任何一种方式工作。
另一种方法是替换所有不是数字的字符。
$a = "830adasdf"
$a = $a -replace "\D" -as [int]
\ D表示任何非数字字符。 -as [int]
将执行演员表演。
在任何一种情况下,[int]
都会将剩余的数字字符串转换为整数。
如果你可以保证它只是末尾的一个字符,那么你也可以使用字符串方法.TrimEnd()
。它删除由char数组确定的字符串末尾的所有字符。让我们给它一个所有字母的数组。在实践中,这是一个案例的问题,所以我们采取字符串,将其转换为大写,然后删除任何尾随字母。
"830z".ToUpper().TrimEnd([char[]](65..99)) -as [int]
它实际上似乎是自动将数字数组转换为char,所以这只会做同样的
"830z".ToUpper().TrimEnd(65..99) -as [int]
答案 1 :(得分:0)
这是我能够提出的最佳选择,接缝工作:不会以最有效的方式缝合...
$t = $parent.Substring($parent.Length-1)
if($t -in @("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"))
{
[int]$parentSRP = $parent.Substring(0,$parent.Length-1)
$parentVer = $parent.Substring($parent.Length-1,1)
}
else{[int]$parentSRP = $parent}