回答編集履歴

5

LINQですよね

2018/08/10 03:30

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -21,3 +21,45 @@
21
21
  //-> 12.5.0\U0000\U0000\U0000\U0000\U0000\U0000\U0002\U0000\U0000\U0080
22
22
 
23
23
  ```
24
+
25
+
26
+
27
+ -- 追記
28
+
29
+ ベストアンサ決まってますけど、まあこんな感じのほうがC#っぽいはず
30
+
31
+ ```csharp
32
+
33
+ static void Main()
34
+
35
+ {
36
+
37
+ var str = "12.5.0\0\0\0\0\0\0\u0002\0\0\u0080\r\n\tあa";
38
+
39
+ Console.WriteLine(string.Join(string.Empty, str.Select(Converter)));
40
+
41
+ // -> 12.5.0\0\0\0\0\0\0\U0002\0\0\U0080\r\n\tあa
42
+
43
+ }
44
+
45
+
46
+
47
+ static string Converter(char c)
48
+
49
+ {
50
+
51
+ if (!char.IsControl(c)) // char.IsControlを使えば、"あ"は回避できるはず
52
+
53
+ {
54
+
55
+ return c.ToString();
56
+
57
+ }
58
+
59
+ var specified = new Dictionary<char, string> { { '\0', "\0" }, { '\r', "\r" }, { '\n', "\n" }, { '\t', "\t" }, };
60
+
61
+ return specified.Keys.Contains(c) ? specified[c] : $@"\U{(int)c:X4}";
62
+
63
+ }
64
+
65
+ ```

4

たいぽ

2018/08/10 03:30

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -18,6 +18,6 @@
18
18
 
19
19
  Console.WriteLine(string.Join(string.Empty/*必要に応じて、" "や、", "にすると見易い*/, str.Select(c => char.IsControl(c) ? $@"\U{(int)c:X4}" : c.ToString())));
20
20
 
21
- //-> 2.5.0\U0000\U0000\U0000\U0000\U0000\U0000\U0002\U0000\U0000\U0080
21
+ //-> 12.5.0\U0000\U0000\U0000\U0000\U0000\U0000\U0002\U0000\U0000\U0080
22
22
 
23
23
  ```

3

とりあえずエンマーク

2018/08/10 03:16

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- -- 修正
9
+ -- 修正(エンマークが出るように修正済み)
10
10
 
11
11
  やりたいことはreplaceでなくて、"制御文字を可視化したい"なので、`char.IsControl`を使えばいい。
12
12
 
@@ -16,8 +16,8 @@
16
16
 
17
17
  var str = "12.5.0\0\0\0\0\0\0\u0002\0\0\u0080";
18
18
 
19
- Console.WriteLine(string.Join(string.Empty/*必要に応じて、" "や、", "にすると見易い*/, str.Select(c => char.IsControl(c) ? $"U{(int)c:X4}" : c.ToString())));
19
+ Console.WriteLine(string.Join(string.Empty/*必要に応じて、" "や、", "にすると見易い*/, str.Select(c => char.IsControl(c) ? $@"\U{(int)c:X4}" : c.ToString())));
20
20
 
21
- //-> 12.5.0U0000U0000U0000U0000U0000U0000U0002U0000U0000U0080
21
+ //-> 2.5.0\U0000\U0000\U0000\U0000\U0000\U0000\U0002\U0000\U0000\U0080
22
22
 
23
23
  ```

2

deindent

2018/08/10 03:15

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -14,9 +14,9 @@
14
14
 
15
15
  ```csharp
16
16
 
17
- var str = "12.5.0\0\0\0\0\0\0\u0002\0\0\u0080";
17
+ var str = "12.5.0\0\0\0\0\0\0\u0002\0\0\u0080";
18
18
 
19
- Console.WriteLine(string.Join(string.Empty/*必要に応じて、" "や、", "にすると見易い*/, str.Select(c => char.IsControl(c) ? $"U{(int)c:X4}" : c.ToString())));
19
+ Console.WriteLine(string.Join(string.Empty/*必要に応じて、" "や、", "にすると見易い*/, str.Select(c => char.IsControl(c) ? $"U{(int)c:X4}" : c.ToString())));
20
20
 
21
21
  //-> 12.5.0U0000U0000U0000U0000U0000U0000U0002U0000U0000U0080
22
22
 

1

linq

2018/08/10 02:57

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -1 +1,23 @@
1
1
  `str.Replace("\", "\");`
2
+
3
+
4
+
5
+ //間違っているけどコメントついてるので残します
6
+
7
+
8
+
9
+ -- 修正
10
+
11
+ やりたいことはreplaceでなくて、"制御文字を可視化したい"なので、`char.IsControl`を使えばいい。
12
+
13
+ ってことは、Linqが使えるので、例えばこんな感じでどうですかね?
14
+
15
+ ```csharp
16
+
17
+ var str = "12.5.0\0\0\0\0\0\0\u0002\0\0\u0080";
18
+
19
+ Console.WriteLine(string.Join(string.Empty/*必要に応じて、" "や、", "にすると見易い*/, str.Select(c => char.IsControl(c) ? $"U{(int)c:X4}" : c.ToString())));
20
+
21
+ //-> 12.5.0U0000U0000U0000U0000U0000U0000U0002U0000U0000U0080
22
+
23
+ ```