質問編集履歴
1
添削
title
CHANGED
File without changes
|
body
CHANGED
@@ -4,13 +4,17 @@
|
|
4
4
|
という文字列があったとします。
|
5
5
|
この中から100という数字を探して、**int型**として抜き出したいです。
|
6
6
|
|
7
|
+
与えられる文字列の条件としては
|
8
|
+
・かならず 100時間 や 20分 のように数字+文字列の形となっています。
|
9
|
+
・必ず数字、文字列の順番です
|
10
|
+
|
7
11
|
#やったこと
|
8
12
|
**unicode.IsDigit()**にruneを渡せば判断できるようなので、それを使って関数を書いてみましたが...
|
9
|
-
|
13
|
+
[https://play.golang.org/p/wrhXOE2aOD](https://play.golang.org/p/wrhXOE2aOD)
|
10
14
|
```go
|
11
15
|
func main() {
|
12
16
|
factor := "100時間"
|
13
|
-
i := numCheck(
|
17
|
+
i := numCheck(factor)
|
14
18
|
fmt.Println(i) //output: 64469
|
15
19
|
}
|
16
20
|
|
@@ -26,5 +30,25 @@
|
|
26
30
|
```
|
27
31
|
|
28
32
|
これではint32の値しかわかりません。
|
33
|
+
このint32の値をintに変換するか、もしくはnumCheckの判別方法を根本的に変えないといけません。
|
29
34
|
|
30
|
-
|
35
|
+
もちろん、文字列の区切りを微調整しつつ**strconv.Atoi()**の返り値で判断するというようなこともできます。
|
36
|
+
以下例
|
37
|
+
[https://play.golang.org/p/jR2zEwqr3I](https://play.golang.org/p/jR2zEwqr3I)
|
38
|
+
|
39
|
+
```go
|
40
|
+
func numCheck(factor string) int {
|
41
|
+
var i = 0
|
42
|
+
for {
|
43
|
+
res, _ := strconv.Atoi(factor)
|
44
|
+
if res != 0 {
|
45
|
+
return res
|
46
|
+
} else {
|
47
|
+
factor = factor[:len(factor) - i]
|
48
|
+
}
|
49
|
+
i ++
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
```
|
54
|
+
正直どちらもくどいので、何かスマートな方法を探しています。
|