数値を表す文字列(java版)
5326 ワード
【件名の説明】文字列が数値(整数と小数を含む)を表すかどうかを判断する関数を実装してください.たとえば、文字列「+100」、「5 e 2」、「−123」、「3.1416」および「−1 E−16」は数値を表します.ただし、「12 e」、「1 a 3.14」、「1.2.3」、「+−5」および「12 e+4.3」はすべてではありません.
【解題の考え方】//1.合法的な数値はA[.[B]][e|EC]または.B[e|EC]. //2.Aは整数部、Bは小数部、Cはe|Eの指数部である.純小数の場合、整数部分がない場合があります.例えば、小数.123が0.123に等しい場合は、合法です.だからA部分は必須ではありません.//3.AとCはすべて整数で、記号をつけてもいいし、つけなくてもいいです.Bは符号なし整数である.
a.なぜ使用しているのか、&&を使用していない理由.小数は整数部分がなくてもよく、例えば.123が0.123に等しい.小数点の後ろには233のような数字がないことができます.233.0に等しい.もちろん、小数点前後には1.123のような数字があります.
【解題構想2】//1.正規表現を用いて//2をマッチングする.これは本意ではないかもしれないが、「英雄は出典を問わず、好漢はごろつき」の原則に基づいて、ここで実現する.
【解題の考え方3】//1.システム自体の検証メカニズムを利用する.//2.この方法は解題のために解題し、使用を奨励しない
【解題の考え方】//1.合法的な数値はA[.[B]][e|EC]または.B[e|EC]. //2.Aは整数部、Bは小数部、Cはe|Eの指数部である.純小数の場合、整数部分がない場合があります.例えば、小数.123が0.123に等しい場合は、合法です.だからA部分は必須ではありません.//3.AとCはすべて整数で、記号をつけてもいいし、つけなくてもいいです.Bは符号なし整数である.
public class Solution {
private int inx;
public boolean isNumeric(char[] str) {
if(str==null || str.length==0){
return false;
}
inx = 0;
boolean flag = scanInteger(str);
//
if(inx<str.length && str[inx]=='.'){
inx = inx+1;
flag = scanUInteger(str)||flag; // a,
}
//
if(inx<str.length && (str[inx]=='e' || str[inx]=='E')){
inx = inx+1;
flag = flag&&scanInteger(str);
}
return flag&& inx>=str.length;
}
//
public boolean scanInteger(char[] str){
if(inx<str.length &&(str[inx]=='+' || str[inx]=='-')){
inx = inx+1;
}
return scanUInteger(str);
}
//
public boolean scanUInteger(char[] str){
int inx1=inx;
while(inx<str.length && str[inx]>='0' && str[inx]<='9'){
inx = inx + 1;
}
return inx>inx1;
}
}
a.なぜ使用しているのか、&&を使用していない理由.小数は整数部分がなくてもよく、例えば.123が0.123に等しい.小数点の後ろには233のような数字がないことができます.233.0に等しい.もちろん、小数点前後には1.123のような数字があります.
【解題構想2】//1.正規表現を用いて//2をマッチングする.これは本意ではないかもしれないが、「英雄は出典を問わず、好漢はごろつき」の原則に基づいて、ここで実現する.
public class Solution {
public boolean isNumeric(char[] str) {
String string = String.valueOf(str);
return string.matches("[\\+-]?[0-9]*(\\.[0-9]*)?([eE][\\+-]?[0-9]+)?");
}
}
【解題の考え方3】//1.システム自体の検証メカニズムを利用する.//2.この方法は解題のために解題し、使用を奨励しない
public class Solution {
public boolean isNumeric(char[] str) {
try {
double re = Double.parseDouble(new String(str));
} catch (NumberFormatException e) {
return false;
}
return true;
}
}