Java 经纬度正则表达式

Java 经纬度正则表达式,java,android,regex,range,decimal,Java,Android,Regex,Range,Decimal,我需要正则表达式来检查有效的lat/long(仅限印度)。经度范围是70-98,小数点后一位,纬度范围是8-36,小数点后一位 我已经在android中实现了这一点。我编写的代码分别适用于-90到90和-180到180范围内的lat和along,它正在工作,但现在我的lat和long范围发生了变化 小数点应允许8.0到36.0 public class Manual_LatLong extends Activity { private EditText LAT1; private Edit

我需要正则表达式来检查有效的
lat/long(仅限印度)
。经度范围是70-98,小数点后一位,纬度范围是8-36,小数点后一位

我已经在android中实现了这一点。我编写的代码分别适用于-90到90和-180到180范围内的lat和along,它正在工作,但现在我的lat和long范围发生了变化

小数点应允许8.0到36.0

public class Manual_LatLong extends Activity

{

private EditText LAT1;

private EditText LONGITUDE1;

private static final String TAG_LAT = "LAT";

private static final String TAG_LONG = "LONGITUDE";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_manual__lat_long);

    LAT1 = (EditText) findViewById(R.id.editText1);
    LONGITUDE1 = (EditText) findViewById(R.id.editText2);

    findViewById(R.id.show).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

             String LAT = LAT1.getText().toString();
            if (!isValidLAT(LAT)) {
                LAT1.setError("Invalid Latitude");
                LAT1.requestFocus(LAT.length());

            }
            else{

                 String LONGITUDE = LONGITUDE1.getText().toString();
                 if (!isValidLONG(LONGITUDE)) {
                    LONGITUDE1.setError("Invalid LONGITUDE");
                    LONGITUDE1.requestFocus(LONGITUDE.length());
                }
                 else{
                    Intent in = new Intent(getApplicationContext(), LocationActivity.class);
                    // Sending lat/long to next activity
                    in.putExtra(TAG_LAT, LAT);
                    in.putExtra(TAG_LONG, LONGITUDE);
                    startActivityForResult(in, 100);
                 }

             }


        }
    });
}

private boolean isValidLAT(String LAT) {
    String LAT_PATTERN = "(-?[0-8]?[0-9](\\.\\d*)?)|-?90(\\.[0]*)?";

    Pattern pattern = Pattern.compile(LAT_PATTERN);
    Matcher matcher = pattern.matcher(LAT);
    return matcher.matches();
}


private boolean isValidLONG(String LONGITUDE) {
    String LONG_PATTERN = "(-?([1]?[0-7][1-9]|[1-9]?[0-9])?(\\.\\d*)?)|-?180(\\.[0]*)?";

    Pattern pattern = Pattern.compile(LONG_PATTERN);
    Matcher matcher = pattern.matcher(LONGITUDE);
    return matcher.matches();

}

}我认为这将是使用正则表达式最糟糕的事情之一。你不能把它换成双精度的吗

double latitude = Double.parseDouble(R.id.editText1.getText().toString());
double longitude = Double.parseDouble(R.id.editText2.getText().toString();
并使用if进行比较(纬度<36&&纬度…等)

编辑:

如果最多只能保留一位小数:

String latitude_s = R.id.editText1.getText().toString();
String longitude_s = R.id.editText2.getText().toString();
并检查每个字符串是否只有一个小数点,如果有小数点,则先检查。(检查如何检查小数位)


之后,您可以继续比较双精度。

对于Lattude,我尝试了以下方法:PATTERN=“(?[7-9]?[0-8](\\.\\d*)?”,但它显示了语法错误。您如何使用此变量,使用哪种语言,错误消息是什么?请更新您的问题。如果这是shell脚本,您不能在等号周围有空格,并且许多标准正则表达式工具(
grep
等)不支持像
\d
这样的Perl扩展(最好修复问题标题中“纬度”的拼写。)通过“带一个小数位”你的意思是最后一个范围是36.0?那么35.9可以,但36.1不行?或者你的意思是一直到36.9?谢谢你的回答,但是用这个我怎么能得到一个小数点纬度和经度。你是说你的纬度和经度应该只有一个小数点吗?意思是8.1是有效纬度,但8.12不是?为什么更精确的坐标无效?