C# regex انقسام إلى تقسيم نمط جافا
سؤال
لا بد لي من نقل بعض رمز C# إلى Java وأواجه بعض المتاعب في تحويل أمر تقسيم السلسلة.
على الرغم من أن Regex الفعلي لا يزال صحيحًا ، عند الانقسام في C# ، تكون الرموز المميزة Regex جزءًا من السلسلة الناتجة [] ، ولكن في Java تتم إزالة الرموز المميزة Regex.
ما هي أسهل طريقة للحفاظ على الرموز المميزة؟
فيما يلي مثال على رمز C# الذي يعمل بالطريقة التي أريدها:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
String[] values = Regex.Split("5+10", @"([\+\-\*\(\)\^\\/])");
foreach (String value in values)
Console.WriteLine(value);
}
}
Produces:
5
+
10
المحلول
لا أعرف كيف يفعل C# ، ولكن لإنجازه في Java ، يجب عليك تقريبه. انظر إلى كيف هذا الرمز هل هذا:
public String[] split(String text) {
if (text == null) {
text = "";
}
int last_match = 0;
LinkedList<String> splitted = new LinkedList<String>();
Matcher m = this.pattern.matcher(text);
// Iterate trough each match
while (m.find()) {
// Text since last match
splitted.add(text.substring(last_match,m.start()));
// The delimiter itself
if (this.keep_delimiters) {
splitted.add(m.group());
}
last_match = m.end();
}
// Trailing text
splitted.add(text.substring(last_match));
return splitted.toArray(new String[splitted.size()]);
}
نصائح أخرى
هذا لأنك تلتقط الرمز المميز المقسم. C# يأخذ هذا كتلميح ترغب في الاحتفاظ بالرمز المميز نفسه كعضو في الصفيف الناتج. جافا لا تدعم هذا.
لا تنتمي إلى StackOverflow