我想将“/* */”部分用大写输出,下面是我自己写的程序,编译时没错,但是运行的结果确是空白,请高手指点。import java.io.*;
public class ceshi
{public static void main(String args[])
{String ss="/* put stream*/ ";
char a[]=ss.toCharArray();
for(int i=0;i<=a.length-1;i++)
{if(a[i]=='/'&&a[i+1]=='*')
{ int m=i+2;
if(a[i]=='*'&&a[i+1]=='/')
{int n=i-1;
String s1=new String(a,m,n);
String s2=s1.toUpperCase();
System.out.print(""+s2);}
} }
}
}
public class ceshi
{public static void main(String args[])
{String ss="/* put stream*/ ";
char a[]=ss.toCharArray();
for(int i=0;i<=a.length-1;i++)
{if(a[i]=='/'&&a[i+1]=='*')
{ int m=i+2;
if(a[i]=='*'&&a[i+1]=='/')
{int n=i-1;
String s1=new String(a,m,n);
String s2=s1.toUpperCase();
System.out.print(""+s2);}
} }
}
}
import java.io.*;
public class ceshi {
public static void main(String args[]) {
String ss="/* put stream*/ ";
char a[]=ss.toCharArray();
int m=-1,n=-1;
for(int i=0;i <=a.length-1;i++) {
if(a[i]=='/'&&a[i+1]=='*')
m=i+2;
if(a[i]=='*'&&a[i+1]=='/')
n=i-2;
if(m!=-1 && n!=-1) {
String s1=new String(a,m,n);
String s2=s1.toUpperCase();
System.out.print(""+s2);
m=-1;
n=-1;
}
}
}
}
public static void main(String args[]) {
String ss="/* put stream*/ ";
char a[]=ss.toCharArray();
int m = 0,n = 0;
for(int i=0;i <=a.length-1;i++) {
if(a[i]=='/'&&a[i+1]=='*') {
m=i+2;
continue;
}
if(a[i]=='*'&&a[i+1]=='/') {
n=i;
continue;
}
}
String s1=new String(a,m,n - m);
String s2=s1.toUpperCase();
System.out.print(""+s2);
}
}返回
PUT STREAM
(a[i]=='*'&&a[i+1]=='/')
对于同一个i,不可能同时满足,
所以m,n应该在for循环外面声明
满足了if(a[i]=='/'&&a[i+1]=='*') 之后,在i没有变动的情况下,又怎么能够满足if(a[i]=='*'&&a[i+1]=='/') 呢?
既然不能,那么下面的块儿肯定是不能执行到的。
{int n=i-1;
String s1=new String(a,m,n);
String s2=s1.toUpperCase();
System.out.print(""+s2);}
}
{
public static void main(String args[])
{
String ss="/* put stream*/ ";
char a[]=ss.toCharArray();
int m = 0;
int n = 0;
for(int i=0;i <=a.length-1;i++)
{ if(a[i]=='/'&&a[i+1]=='*')
{
m=i+2;
}
if(a[i]=='*'&&a[i+1]=='/')
{
n=i;
String s1=new String(a,m,n-m);
String s2=s1.toUpperCase();
System.out.print(s2);
}
}
}
}
public static void main(String args[])
{String ss="/* put/* stream*/ ";
System.out.print(ss.substring(ss.indexOf("/*")+2, ss.lastIndexOf("*/")).toUpperCase());
}
}
用ss.indexOf("/*")获取位置碰到有几个解释符,而且有些“/*input/*Stream*/”这样中间夹带有“/*”或“*/”又怎么办呢?
public static void main(String args[]){
String ss="/* put stream*/ ";
char a[]=ss.toCharArray();
int m=0,n=0; for(int i=0;i <=a.length-1;i++){ if(a[i]=='/' && a[i+1]=='*'){
m=i+2;
}
if(a[i]=='*' && a[i+1]=='/'){
n=i-m;//注意这里
}
}
String s1=new String(a,m,n);
String s2=s1.toUpperCase();
System.out.print(""+s2);
}
}import java.io.*;引入的包没有用到。两个在for中的if语句是并列的,LZ要对程序要在总体上有个大的轮廓。
避免数组的越界,一般这样写if(a[i]=='*' && a[i-1]=='/'){}
if(a[i]=='/' && a[i-1]=='*') {}还有一个问题是函数,String(byte[] bytes, int offset, int length)参数的意思。
String
public String(char[] value,
int offset,
int count)分配一个新的 String,它包含取自字符数组参数一个子数组的字符。offset 参数是子数组第一个字符的索引,count 参数指定子数组的长度。该子数组的内容已被复制;后续对字符数组的修改不会影响新创建的字符串。 参数:
value - 作为字符源的数组。
offset - 初始偏移量。
count - 长度。
所以你的String s1=new String(a,m,n); 是肯定不对的。还有就是那两个if语句应该并列。
public static void main(String args[]) {
String ss="/* put stream*/ ";
char a[]=ss.toCharArray();
int m = 0,n = 0;
for(int i=0;i <=a.length-1;i++) {
if(a[i]=='/'&&a[i+1]=='*') {
m=i+2;
continue;
}
if(a[i]=='*'&&a[i+1]=='/') {
n=i;
continue;
}
}
String s1=new String(a,m,n - m);
String s2=s1.toUpperCase();
System.out.print(""+s2);
}
}
应该让两个if语句编程并列的就好了
public class ceshi {
public static void main(String args[]){
String ss="/* put stream*/ ";
char a[]=ss.toCharArray();
for(int i=0;i <=a.length-1;i++){
if(a[i]=='/'&&a[i+1]=='*'){
int m=i+2;
if(a[i]=='*'&&a[i+1]=='/'){
int n=i-1;
String s1=new String(a,m,n);
String s2=s1.toUpperCase();
System.out.print(""+s2);}
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String regex = "/\\*(.*?)\\*/";
String ss="/* put stream*/ ";
Matcher m = Pattern.compile(regex).matcher(ss);
while(m.find())
System.out.println(m.group(1).toUpperCase());
}
1、if语句嵌套,导致第二个不能有效使用。
2、(a[i]=='/'&&a[i+1]=='*')和(a[i]=='*'&&a[i+1]=='/');对于同一个i,不可能同时满足,所以m,n应该在for循环外面声明。
Java Code
import java.io.*;
public class ceshi{
public static void main(String args[]) {
String ss="/* put stream*/ ";
char a[]=ss.toCharArray();
int n=0,m=0;
for(int i=0;i <=a.length-1;i++) {
if(a[i]=='/'&&a[i+1]=='*') {
m=i+2; }
if(a[i]=='*'&&a[i+1]=='/') {
n=i-1; }
}
String s1=new String(a,m,n);
String s2=s1.toUpperCase();
System.out.print(""+s2);
}
}
运行结果:
PUT STREAM