2017-09-04 7 views
2

JavaがインストールされていないとJavaアプリケーションを実行できないため、私のJavaゲームのランチャーを作っています。私はインターネット上の答えを見て、私の質問に答えを見つけることができません。C#Javaがインストールされているかどうかを確認します。&& version(int)

私の現在のコード:

string temp = GetJavaVersion(); 
string temp2 = temp.Substring(13, temp.Length - 13); 
//string temp3 = temp2.Substring(10, temp2.Length - 1); 
string installPath = temp2; 
ShowMessageBox(installPath, "Debug", MessageBoxButtons.OK, 
MessageBoxIcon.Information); 

GetJavaVersion()メソッドのコード:

 try 
     { 
      ProcessStartInfo procStartInfo = 
       new ProcessStartInfo("java", "-version "); 

      procStartInfo.RedirectStandardOutput = true; 
      procStartInfo.RedirectStandardError = true; 
      procStartInfo.UseShellExecute = false; 
      procStartInfo.CreateNoWindow = true; 
      Process proc = new Process(); 
      proc.StartInfo = procStartInfo; 
      proc.Start(); 
      return proc.StandardError.ReadLine(); 

     } 
     catch (Exception objException) 
     { 
      return null; 
     } 

出力:

"1.8.0_144" 

問題は私が引用符と不要な番号を取得することです(私はちょうどjavaバージョン8がインストールされていることを示す番号8が必要です)、javaがインストールされていない場合0を出力します。

Can Any One Help?

Regexを使用すると、数値をint変数に変換する方法はありますか? コード:

string temp = GetJavaVersion(); 
    string temp2 = temp.Substring(13, temp.Length - 13); 
    requiredJavaVersion = 8; 
    //string temp3 = temp2.Substring(10, temp2.Length - 1); 
    string regexPattern = @"([0-9]+)"; 
    Regex regex = new Regex(regexPattern); 
    //Error comes here 
    int currentVersion = Convert.ToInt32(regex.Matches("1.8.0_144")[1]); 

    if (currentVersion == requiredJavaVersion) 
    { 
     hasRequiredVersion = true; 
    } 

答えて

1

あなたが正規表現で数字にあなたのバージョンを破ることができます。そして、

180144

string regexPattern = @"([0-9]+)"; 
Regex regex = new Regex(regexPattern); 

これはあなたの4件の結果を配列で返します8のバージョンを はint型使用

int value = int.Parse(regex.Matches("1.8.0_144")[1].Value); 
+1

が再びポストをチェックし、私はEDIT – MemesTV

+0

編集答え、あなたに新しいものを追加しました'Match 'から値を取得する必要があります。 –

+0

Anwserに感謝します。 – MemesTV

0

にこれを変換するには正規表現が高価であるとして、あなたはまた、LINQを使用することができます。

var result = "1.8.0_144"; 
var version = new string(result.SkipWhile(c => c != '.') 
           .Skip(1) 
           .TakeWhile(c => Char.IsDigit(c)) 
           .ToArray()); 
Console.WriteLine(version); // 8 
関連する問題